1) Долгота обычно должна составлять от -180 до 180, поэтому просто проверьте, соответствуют ли координаты из Google этому условию.Вероятно, да.Если нет, просто нормализуйте их, чтобы они были в пределах этого интервала, добавив или вычтя 360. Нормируйте их , прежде чем вызывать хранимую процедуру .
2) Обычно @swLng <= @neLng
, но вы также должны обработатьдело @swLng > @neLng
.Так что внутри вашей хранимой процедуры ваше состояние долготы будет выглядеть следующим образом:
AND
(
(CONVERT(Decimal(11,8), @swLng) <= CONVERT(Decimal(11,8), @neLng)
AND place_lng >= CONVERT(Decimal(11,8), @swLng)
AND place_lng <= CONVERT(Decimal(11,8), @neLng)
)
OR
(CONVERT(Decimal(11,8), @swLng) > CONVERT(Decimal(11,8), @neLng)
AND (place_lng >= CONVERT(Decimal(11,8), @swLng)
OR place_lng <= CONVERT(Decimal(11,8), @neLng))
)
)
PS: обратите внимание, что вам, вероятно, следует использовать ГИС, подобную PostGIS, чтобы это было действительно эффективным :) Я был очтобы решить эту проблему, но я все еще откладывал это "до тех пор, пока у меня есть ГИС".Вы вдохновили меня, и, возможно, я тоже пойду на это решение.
PS: я не уверен, как оптимизируется ваш движок базы данных, но я предполагаю, что для повышения эффективности может помочь, если вы определитеширота и долгота в качестве индексов - чтобы быстрее решать условия.Но я совсем не уверен.