#postgis #openstreetmap #postgresql-9.3 #pgrouting
#postgis #openstreetmap #postgresql-9.3 #pgrouting
Вопрос:
(Я не являюсь носителем английского языка, поэтому, пожалуйста, игнорируйте мои грамматические ошибки.)
У меня есть имя базы данных PostgreSQL как Karachi, и я загрузил карту osm karachi изhttps://download.bbbike.org затем я преобразовал его в формат файла shp в GeoJSON с помощью QGIS, а затем импортировал этот Karachi.geojson в PostgreSQL с помощью этих команд:
ogr2ogr -select name -nlt CONVERT_TO_LINEAR -lco GEOMETRY_NAME=the_geom -lco FID=id -f PostgreSQL PG:"dbname='Karachi' host='localhost' port='5432' user='postgres' password='Password'" -nln edges Karachi.geojson -where "OGR_GEOMETRY='MultiLineString'"
ALTER TABLE edges ADD source INT4;
ALTER TABLE edges ADD target INT4;
ALTER TABLE edges ALTER COLUMN the_geom TYPE geometry(linestring,4326) USING ST_GeometryN(the_geom, 1);
SELECT pgr_nodeNetwork('edges', 0.00001);
SELECT pgr_createTopology('edges_noded', 0.00001);
ALTER TABLE edges_noded ADD COLUMN name VARCHAR,ADD COLUMN type VARCHAR;
UPDATE edges_noded AS new SET name=old.name FROM edges as old WHERE new.old_id=old.id;
ALTER TABLE edges_noded ADD distance FLOAT8;
UPDATE edges_noded SET distance = ST_Length(ST_Transform(the_geom, 4326)::geography) / 1000;
После этого у меня есть две широты и долготы
67.112457,24.882638
67.113009,24.882293
Я хочу найти расстояние между этими двумя широтами и долготой, поэтому я использую этот запрос для получения идентификаторов osm:
SELECT v.id, v.the_geom, string_agg(distinct(e.name),',') AS name
FROM edges_noded_vertices_pgr AS v, edges_noded AS e
WHERE v.id = (
SELECT id
FROM edges_noded_vertices_pgr
ORDER BY the_geom <-> ST_SetSRID(ST_MakePoint(67.0691865,24.9065008), 4326)
LIMIT 1
)
AND (e.source = v.id OR e.target = v.id)
GROUP BY v.id, v.the_geom
Этот запрос возвращает мне одинаковый идентификатор osm для обоих (lat, long) s
Как решить эту проблему?
Есть ли какое-либо другое решение этой проблемы с помощью Windows 10?