Beispiel für einen Dynamic Map Service, der sich häufig ändert?

8

Eine Anforderung unserer Webanwendung besteht darin, einen bestimmten dynamischen Kartendienst auf einem Timer automatisch zu aktualisieren.

Die Anforderung bezieht sich auf einen Client mit einer dynamischen MS, die regelmäßig Aktualisierungen von GPS-Sensoren erhält.

Vergessen wir zunächst die Feature-Services und WMS- oder Image-Services, die sich häufig ändern können.

In Bezug auf die Codierung war es ziemlich einfach, dies zu erreichen.

Unsere Tester möchten jetzt einen dynamischen Kartendienst, der sich häufig ändert (idealerweise mindestens alle 15 Sekunden), damit sie sehen können, wie dies im Frontend aussieht. Hilft uns auch dabei, unseren Kunden die neuen Funktionen zu demonstrieren.

Ich habe die Esri-Beispielserver durchsucht, kann aber keinen finden.

Ist jemandem ein solcher öffentlicher Dienst bekannt, den wir für schnelle Tests nutzen könnten?

Wenn die Antwort Nein lautet, müssen Skripte vorhanden sein, um die GPS-Tracking-Bewegung zu emulieren und möglicherweise die Position einiger Punkte weiter zu ändern. Dann kann ich meinen eigenen Dienst einrichten.

Simon
quelle
1
Wo werden Ihre Daten hinter dem Kartendienst gespeichert? Sprechen wir über ArcSDE über SQL Server / Oracle, Datei-Geodatabase usw.?
Chad Cooper
Kann eine der oben genannten sein. Halten Sie alles in unserer Testumgebung bereit. Die neue Funktionalität sollte in all diesen Umgebungen getestet werden, aber ich habe wenig Angst, dass es im Backend ein Problem gibt.
Simon
Vielleicht könnte Ihnen i2maps ncg.nuim.ie/i2maps/docs/index.php?page=examples helfen?
Radek
Muss es mit 10.1 funktionieren, sobald es veröffentlicht ist?
Kirk Kuykendall
Benötigen Sie keinen Tracking Server für ArcGIS Server? esri.com/software/arcgis/tracking-server/index.html , um dies zu tun?
Mapperz

Antworten:

2

Wenn Sie die REST-API verwenden, können Sie dies meiner Meinung nach ohne den arcgis-Server tun. Wenn eine Anforderung für eine Karte eingeht , geben Sie eine JSON-Zeichenfolge zurück, die der REST-API-Spezifikation entspricht und neue Speicherorte darstellt.

Bei Windows kann dies durch Implementierung eines WCF-Rest-Dienstes erfolgen . Der Dienst würde eine Reihe von Fahrzeugen im Speicher behalten. Jedes Fahrzeug würde Standort, Kurs, Geschwindigkeit und Zeitstempel haben. Wenn eine Anfrage eingeht, wird der Standort basierend darauf aktualisiert, wie viel Zeit seit dem letzten Zeitstempel vergangen ist, wobei eine gewisse Entfernung basierend auf Geschwindigkeit und Kurs ausgeglichen wird.

Wenn Ihre Fahrzeuge Straßen folgen müssen, können Sie für jedes Fahrzeug einen Pfad in eine Datei (x, y und Zeit) einfügen. Der REST-Service könnte dann die Datei verwenden, um Positionsaktualisierungen zurückzugeben, die entlang dieser Pfade folgen.

Ihr Kunde würde einen Timer benötigen, um alle 15 Sekunden eine Anfrage zu stellen. Fügen Sie der URL einen Zeitstempel hinzu, um das Caching zu verhindern.

Bearbeiten

Eine andere Alternative wäre die Verwendung einer Laienerweiterung. Erstellen Sie einen MXD, der auf einen Dummy-Featurelayer zeigt. Wenn ILayerExtensionDraw.BeforeLayerDraw zum ersten Mal aufgerufen wird, muss IFeatureLayer.Featureclass durch eine In-Memory-Feature-Class ersetzt werden (erstellt mit inmemoryworkspacefactory ). Die Punkt-Feature-Class würde Fahrzeugstandorte mit Feldern für Kurs, Geschwindigkeit und Zeitstempel darstellen. Jedes Mal, wenn BeforeLayerDraw aufgerufen wird, werden die Speicherorte basierend auf Geschwindigkeit, Richtung und Zeit seit dem letzten Zeitstempel aktualisiert. Vergessen Sie nicht, dass Ihre Layerxtension IPersistStream implementiert .

Kirk Kuykendall
quelle
Sehr gutes Beispiel; Ich habe das in den letzten paar Jahren gemacht, aber ohne den REST. Wir hatten eine ArcSDE-Ebene, die mit Fahrzeugtelemetrie aktualisiert wurde, die alle 30 Sekunden von jedem Auto abgefragt wurde. Diese Daten wurden in eine Punktebene mit den Werten eingefügt, die alle mit einem Zeitstempel versehen waren. Wir hatten gerade eine Methode, mit der die Kartensteuerung (Ja-ADF-basiert, Yuck) in einem konfigurierbaren Fenster aktualisiert und die 5 neuesten Fahrzeuginformationspunkte abgerufen werden konnten, damit Sie Bewegung und Timing sehen konnten. Funktionierte gut für PD / EMS ...
DEWright
Schön, aber nicht was ich will. Ich benötige eine D-MS, die ich über eine Esri-API aufrufen kann, und an anderer Stelle in meinem Code muss sie diesen Dienst weiterhin anfordern. Ihre Antwort scheint für meine Testanforderungen übertrieben zu sein?
Simon
-1

Die Natur eines dynamischen Kartendienstes besteht darin, dass er pro Anforderung im laufenden Betrieb gerendert wird. Um Änderungen auf der Clientseite zu sehen, muss eine neue Kartenanforderung ausgegeben werden.

Standardmäßig platziert ein über ArcGIS Server gehosteter dynamischer Kartendienst eine "Schemasperre" für die Daten, sodass Änderungen an den Quelldaten während der Ausführung des Dienstes nicht zulässig sind.

Dies kann durch Bearbeiten der Eigenschaften in der Konfigurationsdatei für Kartendienste (.cfg) behoben werden. Ein <SchemaLockingEnabled>false</SchemaLockingEnabled>Eintrag ermöglicht Änderungen an den Quelldaten, während der Dienst ausgeführt wird.

Siehe http://help.arcgis.com/de/arcgisserver/10.0/help/arcgis_server_dotnet_help/index.html#//0093000000mr000000

Allan Adair
quelle
HINWEIS: Wenn Feature-Updates über einen Feature-Service erfolgen, müssen Sie sich keine Gedanken über die Schemasperre machen. Das Senden von Feature-Änderungen über einen Feature-Service ist außerdem eine hervorragende Möglichkeit, das dynamische Neuzeichnen eines Mapservice zu testen.
Allan Adair
Allan, der beste Weg, um dieses Problem zu lösen, ist eine räumliche Ansicht aus einer SDE / DB-Quelle. Sie aktualisieren diese Tabelle live und wenn die neue Abfrage ausgelöst wird, wird die Ansicht und die Quellenebene getroffen.
DEWright
Dies ist aus architektonischer Sicht ein guter Tipp. Wenn Simon SDE zum Speichern / Abrufen von Daten verwendet, ist dies eine weitere Möglichkeit, um zu testen, ob ein dynamischer Kartendienst in der clientseitigen Anwendung ordnungsgemäß gerendert wird.
Allan Adair
Ein anderer Kunde hatte gerade einen X / Y-Wert, mit dem wir Punkte im laufenden Betrieb basierend auf dem aktuell sichtbaren Umfang erstellen konnten, und das funktionierte auch gut. Ich wünschte, ich hätte einen öffentlich zugänglichen Dienst, um dies zu demonstrieren. Da es sich jedoch um staatliche Dienste handelt, sind sie alle gesichert.
DEWright
Dieses Beispiel sollte funktionieren: sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/… Es ist der Beispieldienst, der mit dem interaktiven Silverlight-SDK bearbeitet werden kann. Ich bin mir sicher, dass es da draußen noch mehr gibt. help.arcgis.com/de/webapi/silverlight/samples/…
Allan Adair