Я исследовал это в течение двух дней и не могу найти ничего, что работает для меня, это может быть мой дизайн базы данных, но я думаю все в порядке.
У меня есть таблицаназываемый "post_codes_new", он содержит следующие столбцы:
id (int)
post_code (varchar, example: "0612")
post_code_name (varchar, example: "Henderson")
latlongs (geography data type - forming a polygon)
Я пытаюсь сделать запрос к этой таблице, используя точку lat / long, чтобы вернуть любую запись post_codes, которая содержит этот lat / long (любую записьчто широта / долгота попадают в границы).
Вот над чем я работал;
DECLARE @point geography;
SET @point = geography::STGeomFromText('POINT(174.94280000 -36.75000000)',4326)
select post_code
from dbo.post_codes_new
WHERE latlongs.MakeValid().STContains(@point) = 1;
Независимо от того, какую точку широты / долготы я ввожу здесь, мой запрос возвращаетмне 931 из 1081 записей в этой таблице, и это занимает 22 секунды .... Он должен вернуть только одну запись.И я надеюсь на лучшую производительность, конечно.
Я пытаюсь достичь этого;
['PSEUDO-CODE' QUERY OF WHAT I'D LIKE TO ACHIEVE]
SELECT post_codes.* FROM post_codes WHERE latlongs.STIntersects(myLatLongPoint) = 1
Все примеры, на которые я смотрел (на этом сайте и в других местах), кажутсяработать с полигонами, которые определены в запросе (т. е. точки перечислены в теле запроса в явном виде).Я видел несколько таких, которые смотрели на записи, содержащие границы многоугольников, но ни одна из них не сработала для меня.
Спасибо.