Jeszcze

ESRI QueryLayer + Javascript API - mapa wyświetla niespójne wyniki

ESRI QueryLayer + Javascript API - mapa wyświetla niespójne wyniki


Niedawno przeprowadziliśmy migrację jednej z naszych usług mapowych z FGDB do zaplecza przestrzennej bazy danych SQL Server. Zauważamy teraz problem polegający na tym, że mapa wydaje się wyświetlać lokalizacje niespójnie. Stworzyłem JSFiddle, aby zademonstrować problem i maksymalnie uprościć kod.

http://jsfiddle.net/acurtiss/pbuLot1g/24/

Jeśli powiększasz lub pomniejszasz lub po prostu ponownie uruchamiasz aplikację, powinieneś zobaczyć, że niektóre kody pocztowe zostaną losowo puste. (Kody pocztowe na tej mapie powinny być wypełnione prawie w 100%.) Sprawdziłem obiekt JSON zwrócony z usługi map i sprawdziłem, czy wyniki są spójne i poprawne, więc zaczynam podejrzewać problem z interfejsem JavaScript API samo. Skontaktowałem się z pomocą techniczną ESRI i mam otwarte zgłoszenie, ale jak dotąd nie zidentyfikowali źródła problemu, więc pomyślałem, że udostępnię to szerszemu gronu ekspertów GIS tutaj na tej stronie.

Zgodnie z prośbą, oto zrzut ekranu przedstawiający znaczną liczbę pustych kodów pocztowych. (Ze względu na pewne ograniczenia mojego konta w tej witrynie najwyraźniej nie mogę opublikować wielu zrzutów ekranu, ale mam nadzieję, że ten przykład pokazuje problem, który próbuję rozwiązać.)


Sprawdziłbym kilka rzeczy:

  1. Jaki jest limit puli w tej usłudze map? Wysyłanych jest wiele jednoczesnych żądań zapytań i możesz osiągnąć maksymalny limit instancji, co powoduje, że niektóre odpowiedzi serwera działają zabawnie. Możesz zwiększyć maksymalny limit lub zmienić ustawienia izolacji na Niską izolację. (W przeszłości miałem pecha z niską izolacją, więc to może nie zawsze działać).

  2. Widzę zaznaczone odpowiedzi na pytania304 NIE ZMODYFIKOWANEwięc możesz spróbować zabrudzić swoje zapytanie, aby zawsze pobierało wynik z serwera.

Możesz to zrobić tutaj:

var dirty = (nowa Date()).getTime(); var query = new esri.tasks.Query(); zapytanie.returnGeometry = prawda; zapytanie.maxAllowableOffset = 1000; //nie wiesz, jaki jest tutaj cel? query.where = "NAZWA = '" + globals.siteFilter + "' AND " + dirty + "=" + dirty;

edit: Po zabawie z JSFiddle (przepraszamy za jakiekolwiek obciążenie serwera!) Myślę, że problemem jest twój maksymalny limit puli.

MODE_SNAPSHOT- Jak zauważyłeś w powyższym komentarzu, ten problem znika w tym trybie, ale jest to pojedyncze żądanie, które pobiera wszystkie funkcje jednocześnie i zajmuje około 40-50 sekund, aby zakończyć rysowanie. Rozumiem, dlaczego nie chciałbyś tego do produkcji.

TRYB_ONDEMAND— Powoduje to rozbicie zapytania FeatureLayer na mniejsze zapytania AOI. Plusem jest to, że potencjalnie możesz szybciej uzyskać wyniki, jeśli Twój FeatureLayer zawiera wiele funkcji. Minusem jest to, że wyniki istnieją tylko do momentu ponownego panoramowania/powiększania mapy przez użytkownika, co powoduje wysłanie kolejnego zestawu zapytań. Zwiększa to obciążenie serwera.

Mam wrażenie, że te 2 instancje nie poradzą sobie z liczbą zapytań wysyłanych z TwojegoTRYB_ONDEMANDfunkcje. Wziąłem jedną z pustych odpowiedzi i podłączyłem parametry bezpośrednio do punktu końcowego REST i odzyskałem 137 funkcji. Czy możesz spróbować podnieść maksymalny limit puli do 8 lub 10?


W przeszłości miałem podobne problemy z ustawianiem definicji lub widoczności warstwy podczas rysowania. Zobacz ten link: https://geonet.esri.com/thread/10158 Może to jest twój problem…


Obejrzyj wideo: Работа с Google Maps API. Создание своей карты на JavaScript