2015-09-09 4 views
0

У меня есть хорошее понимание службы REST Bing, но, я действительно тупик на этом.Bing Maps игнорирует пространственный фильтр?

То, что я пытаюсь сделать, это получить продуктовый магазин ($ filter = 5400) в полигоне, расположенном во участке переписи во Флориде ($ пространственный фильтр), но результаты взяты из Массачусетса!

URL-адрес (я не предоставил ключ Bing по понятным причинам :-) http://spatial.virtualearth.net/REST/v1/data/f22876ec257b474b82fe2ffcb8393150/NavteqNA/NavteqPOIs? $ = Формат JSON & $ топ = 1 & $ фильтровальной = EntityTypeID% 20Eq% 20% 275400% 27 & $ spatialFilter = пересечение (ПОЛИГОН% 20 ((- 81,190439% 2028,590798999999997,% 20-81.193080999999992% 2028,590759,% 20-81.196646% 2028,590698999999997,% 20-81.198315999999991% 2028,590671,% 20-81.204715% 2028,590566,% 20-81.204828999999989% 2028,590767,% 20 -81,20603899999999% 2028,592836,% 20-81.206306% 2028,593291999999998,% 20-81.206443999999991% 2028,593528,% 20-81.207657% 2028,593486,% 20-81.207929% 2028,595012999999998,% 20-81.20795% 2028,594935,% 20-81.207956% +2028,594918,% 20- 81.208027% 2028.594707,% 20-81.208052999999992% 2028,594631999999997,% 20-81.20811599999999% 2028,594452,% 20-81.208207% +2028,594196999999998,% 2 0-81.208302% 2028,593913999999998,% 20-81.208364% 2028,593733999999998,% 20-81.208396999999991% 2028,593638,% 20-81.208413999999991% 2028,593586,% 20-81.208429999999993% 2028,593541,% 20-81.208523% 2028,593269,% 20-81.208565% 2028,593144,% 20 -81,208615999999992% 2028,592997,% 20-81.208655999999991% 2028,592879,% 20-81.208713% 2028,592713,% 20-81.20877% 2028,592523999999997,% 20-81.208806% 2028,592405,% 20-81.208844% 2028,592271999999998,% 20-81.208923% +2028,592004,% 20- 81.208951% 2028.591872,% 20-81.208981% 2028.591738,% 20-81.209% 2028,591641,% 20-81.209008% 2028,591566999999998,% 20-81.209032999999991% 2028,591364,% 20-81.209049999999991% +2028,59114,% 20-81.209049% 2028,591048999999998,% 20-81.209049 % 2028,590875999999998,% 20-81.209042% 2028,590608,% 20-81.209042% 2028,590595,% 20-81.209027999999989% 2028,590414,% 20-81.208998999999991% 2028,590194,% 20-81.20894% 2028,589881,% 20-81.208924% 2028,589817,% 20-81.20886% 2028.589558,% 20-81.208777% 2028.589311,% 20-81.208744% 2028,589212999999997,% 20-81.208588999999989% 2028,588699,% 20-81.208544% 2 028.588565,% 20-81.208461% 2028.588319,% 20-81.208423% 2028,588206999999997,% 20-81.208311% 2028,587871999999997,% 20-81.208274% 2028,587761,% 20-81.208201% 2028,587557999999998,% 20-81.208074% 2028,587204,% 20-81.207997999999989% +2028,586944 ,% 20-81.207973% 2028,5868559999999 & ключ = <BING_KEY>

Что я получаю обратно не должно быть:

{ 
"d": { 
    "results": [ 
     { 
      "__metadata": { 
       "uri": "https://spatial.virtualearth.net/REST/v1/data/f22876ec257b474b82fe2ffcb8393150/NavteqNA/NavteqPOIs('1001002038')" 
      }, 
      "EntityID": "1001002038", 
      "Name": "Nosso Brazil", 
      "DisplayName": "Nosso Brazil", 
      "AddressLine": "25 Boston Post Rd", 
      "Locality": "Marlborough", 
      "AdminDistrict2": "Middlesex", 
      "AdminDistrict": "Massachusetts", 
      "PostalCode": "01752", 
      "CountryRegion": "USA", 
      "Latitude": 42.35173, 
      "Longitude": -71.52983, 
      "Phone": "508-3032424", 
      "EntityTypeID": "5400" 
     } 
    ] 
} 

}

С моей оценке, Бинг возвращая первый продуктовый магазин на Bing 5400 и compl etely игнорируя параметр $ spacesFilter, может ли кто-нибудь определить, как вернуть что-то другое, чем то, что было возвращено? Смысл, может ли кто-нибудь вернуть продуктовый магазин в пределах определенного полигона во Флориде?

ответ

0

Существует ряд проблем с вашим URL-адресом запроса.

Первая проблема заключается в том, что пространственный фильтр не должен начинаться с $. Таким образом, URL-адрес возвращается к стандартным фильтрам и захватывает первый результат в мире, который соответствует этому значению фильтра.

Вторая проблема заключается в том, что пространственный фильтр не поддерживается на источниках NavteqNA, NavteqEU и FourthCoffeeSample. Причина этого в том, что эти источники данных значительно больше, чем самый большой пользовательский источник данных. Выполнение этих типов сложных запросов в этих больших источниках данных было бы очень медленным. Таким образом, этот тип запросов был отключен для этих источников данных. Именно поэтому при просмотре образцов запросов в документации эти источники данных не используются в образцах.

Третья проблема заключается в том, что строка Polygon является неполной. Похоже, что после добавления к этому URL ключа Bing Maps общая длина URL-адреса составляет 2083 символа, что является пределом, поддерживаемым браузерами. Вероятно, поэтому текст Polygon отключен. Несколько советов, которые помогут предотвратить это, уменьшите количество десятичных знаков, находящихся в вашей строке. 5 знаков после запятой имеют точность +/- 0,17 м, что, вероятно, достаточно точно для вашего приложения. Некоторые из ваших номеров имеют 15 знаков после запятой, поэтому это потенциально 10 символов на номер, который вы могли бы устранить.

Если у вас есть хорошо известный текст для многоугольника, уже находящегося в коде, вы можете использовать простое регулярное выражение, чтобы найти и заменить это. Используйте следующую закономерность: (. [0-9] [0-9] {5})

([0-9])

и заменить его

$ 1

Это удалит все номера после 5 знаков после запятой. Вы также можете оптимизировать URL-адрес, удалив пробелы после запятой, поскольку они не нужны. Сделав эти две вещи, вы можете сократить длину URL пополам.

Поскольку полигон отключен, известный текст недействителен. Чтобы быть допустимым, полигон должен заканчиваться той же самой координатой, с которой он начинается.