Это дерьмо, но я решил, что все равно выберу мозги более опытных.
Как вы, наверное, знаете, вы можете использовать приведенный ниже запрос, чтобы найти расстояние между двумя наборами координат.
DECLARE @source geography = 'POINT(-93.54803 39.790132)'
DECLARE @target geography = 'POINT(-105.0207 39.9652)'
SELECT @source.STDistance(@target)/1609.344 AS distance_in_miles
Мне нужен был способ найти расстояние между двумя почтовыми индексами без использования формулы гаверсинуса, поэтому я написал это:
DECLARE @source GEOGRAPHY
DECLARE @target GEOGRAPHY
DECLARE @Szip VARCHAR(10) = '64601'
DECLARE @Ezip VARCHAR(10) = '80023'
SET @source = (SELECT longitude+ ' ' +latitude FROM us_loc_data WHERE @Szip = zip)
SET @target = (SELECT longitude+ ' ' +latitude FROM us_loc_data WHERE @Ezip = zip)
SELECT @source.STDistance(@target)/1609.344 AS distance_in_miles
Я не думал, что вышеизложенное сработает, и это не сработало по этой причине:
Сообщение 6522, уровень 16, состояние 1, строка 5 Произошла ошибка .NET Framework во время выполнения определяемой пользователем подпрограммы или совокупной "географии": System.FormatException: 24114: метка -93.54803 39.790132 во входных данных известна текст (WKT) недействителен.
Насколько я понимаю, для того, чтобы это действительно работало, пара координат, заключенная в круглые скобки, должна быть зажата между кавычками с POINT в начале строки.
Мне интересно, возможно ли то, что я пытаюсь сделать, удаленно. Могу ли я каким-то образом назначить операторы select своим переменным (@source и @target) для запроса координат вместо того, чтобы явно указывать какие координаты, которые я хочу использовать?