|
POST
|
John Dye ... you have correctly interpreted the recommendation. You probably want to defer production engagements you think require GeoEvent multi-machine functionality and continue to deploy GeoEvent Server in separate ArcGIS Server sites. There's still work we need to complete to document best practices for you. Also, there are some issues we are investigating which tend to manifest with deliberate fault injection (like abruptly powering down a machine or severing its network connection). There will likely be a patch for 10.6 for multi-machine deployments ... stay tuned. - RJ
... View more
02-06-2018
05:45 PM
|
0
|
2
|
5310
|
|
POST
|
There were two changes made to stream services for the 10.6 release: 1) The websocket library was upgraded to jetty 9.x.x for the 10.6 ArcGIS release. This could impact external clients, but when we tested with web maps on Chrome we didn’t see a problem. 2) The way the stream service outbound transport sends events to the websocket server changed in the ArcGIS 10.6 release. Basically, if the client appears to be making a request to the local ArcGIS Server, we call a method to send data directly to the websocket server rather than sending it through the internal websocket. This second change should be internal, and should not affect how clients connect. Unless IIS/ARR is a contributing factor. You indicate the problem is only seen with Chrome and Firefox. That would usually suggest a certificate issue or a JavaScript client issue, since the issue is not observed on other browsers. Nikhil Shampur encountered something similar recently using stream services with IIS/ARR in Esri's cloud deployments. He told me that they had to change their ARR proxy rules to route WSS and HTTPS requests to the HTTP endpoint (6180) of GeoEvent. Client requests made via the load balancer must be made via HTTPS/WSS and through IIS/ARR to GeoEvent over HTTP. Please consider opening an incident with Esri Tech Support to help track this issue. - RJ
... View more
01-29-2018
03:05 PM
|
0
|
2
|
6465
|
|
IDEA
|
Yeah, in your case, I would not try to design a GeoEvent Service with five or six dozen Field Enricher processors to convert the coded values to descriptive strings one at a time. The headache of trying to maintain that in a GeoEvent Service aside, you'll likely encounter performance and perhaps even product stability issues. For this case, given 50 - 60 coded value domains, I think the better approach would be to develop a custom processor using the GeoEvent Server SDK. A custom processor could take in a single event with five or six dozen coded values and convert all of those numeric fields to equivalent descriptive string values. One event in, one event out, one processor. Much cleaner approach. - RJ
... View more
01-23-2018
02:30 PM
|
0
|
0
|
2889
|
|
BLOG
|
No, the functions receivedTime() and currentTime() will not work in a Filter expression. The Field Calculator processor doesn't provide an expression builder, but its interpreter is more powerful and able to support function calls like those documented on the Processors page in our on-line help, beneath the Field Calculator topic. The event properties and tags (those designated with a $ in the Filter Properties expression builder's Field drop down) only work for Filters. You cannot freehand enter functions like those Field Calculator supports into a Filter expression, but you can use a Filter's expression builder to assist in building valid filtering expressions.
... View more
01-23-2018
02:11 PM
|
0
|
0
|
1578
|
|
IDEA
|
Ken - GeoEvent Server really only has the information provided in an event record. When polling feature records from a feature class, through a feature service, GeoEvent is provided the coded values, not the descriptive strings. If the descriptive strings and their coded values are available via a REST request, so we could pull them out of the service's metadata properties, we might be able to offer some sort of switch on an inbound connector to replace the coded values with their descriptive strings ... but this may run into problems with data structures and data types with how the transport and adapter underneath an inbound connector work to pull data into GeoEvent Server. I have a potential workaround you might try. You could establish the codedValue-to-descriptiveString mapping in a non-spatial table and publish that along with your feature service as a layer ... then configure a Field Enricher processor to use the coded value as the primary key for an attribute join and enrich each event record with the descriptive string for that event record's coded value attribute. If you have only a couple of coded values, this shouldn't be too bad to design into your GeoEvent Service. The only real headache would be having to maintain the coded values for the domain in both the geodatabase and in the look-up table being used by GeoEvent Server. - RJ
... View more
01-23-2018
01:36 PM
|
0
|
1
|
2889
|
|
BLOG
|
Linda - $RECEIVED_TIME is a property of each event record. You might look at this as a "macro" which allows you access to an event record's internal property value. The event record does not provide access to "current time", so there is no equivalent when configuring filter expressions to allow the expression to consider the current time. There are a couple of functions supported by the Field Calculator processor you might consider using. If you enter receivedTime() or currentTime() for a Field Calculator's expression, you can retrieve either the time the event record was received, or the system's current time. Treating these as long integer values (in epoch milliseconds) you can compare one value vs. another (less-than, greater-than, ...) or subtract "current time" from a value and then test to see if the result is positive or negative (as part of a filter expression). - RJ
... View more
01-23-2018
10:47 AM
|
0
|
0
|
1578
|
|
POST
|
Yes, with the introduction of the GeoEvent Gateway, system architects again have the option of deploying GeoEvent Server with multiple machines configured as part of a single ArcGIS Server site. The recommendation is still that your ArcGIS Enterprise be deployed separately allowing you the flexibility to scale the GIS Server component for map and feature services. The only real change to the diagram would be to de-emphasize the white space between GeoEvent Server instances: Above, I'm illustrating that a GeoEvent Gateway, running on each ArcGIS Server machine, will coordinate through the ArcGIS Server site dedicated for real-time event processing to distribute events processing across the three machines. There are still a number of questions to prove out here. What if a solution were being designed which had several, independent, inbound feeds whose velocity and/or event volume were each nominal (no more than 1,000 or 2,000 events per second)? Such a use case wouldn't require an event distribution mechanism to leverage several machines. It might be better, in this case, to follow the 10.5 / 10.5.1 pattern of deploying independent instances of GeoEvent Server in separate sites, dedicating instances to handle one or two independent inbound data streams. The above single-site, multi-machine approach would be recommended only if you were deploying 10.6 and had a single inbound event stream whose velocity / event volume were too much for a single server to handle. A tutorial is being prepared for system architects and solution engineers which will identify recommended best practices for product deployment in a multi-machine configuration. The tutorial should be available by the Developer Summit, March 6 - 9 2018. Please reach out to Greg Tieman with questions on this. You can read more about the GeoEvent Gateway in the on-line help which was pushed out 9-January: What's New at 10.6 GeoEvent Server (Internationalization of the on-line help is still pending as I post this reply...) - RJ
... View more
01-23-2018
09:56 AM
|
1
|
4
|
5310
|
|
POST
|
It doesn't look like the thread's comments are going to allow me to attach a file. You can refer to the following 10.6 XML if you want to examine any property settings -- or copy/paste the code into a *.xml text file if you want to or try to import the GeoEvent Server configuration I illustrated above. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<template productVersion="10.6.0">
<geoEventServices>
<geoEventService name="06c2a74b-bfaf-480a-8ba4-bda61c875b03" label="Compute AOU" description="" lineStyle="Diagonal" runningState="STARTED" statusDetails="">
<inputs>
<input ref="cbb16d04-039b-4954-8125-58177b71acb7" label="rest-json-in" left="51" top="77" width="75" height="40"/>
</inputs>
<outputs>
<output ref="bfaa113f-4284-447d-8fd3-444962bd0379" label="EllipseBroadcast" left="470" top="250" width="103" height="40"/>
<output ref="cad802bf-52cb-493f-8fb4-d2331340d550" label="file-json-out" left="471" top="173" width="79" height="40"/>
<output ref="6cb3a7b7-2093-45d7-8de2-a545a8dca8f7" label="PointBroadcast" left="470" top="10" width="95" height="40"/>
</outputs>
<nodes>
<node name="54e27398-c945-4b71-86dd-5054e9240847" label="(Ellipse) Stream Schema" left="210" top="210" width="200" height="40">
<processor uri="com.esri.ges.processor/FieldMapper/10.6.0">
<properties>
<property name="inputFields" type="String">id,geometry</property>
<property name="outputFields" type="String">id,geometry</property>
<property name="inputGeoEventDefinition" type="GeoEventDefinition">EllipseCalculator-Parameters</property>
<property name="outputGeoEventDefinition" type="GeoEventDefinition">StreamService-EllipseBroadcast</property>
</properties>
</processor>
</node>
<node name="fdd875ad-b7fc-4d63-8ee9-f954da753016" label="Calculate AOU" left="210" top="130" width="200" height="40">
<processor uri="com.esri.geoevent.solutions.processor.geometry/EllipseProcessor/10.5.0">
<properties>
<property name="rotationSource" type="String">Event</property>
<property name="rotationEvent" type="String">rotation_angle</property>
<property name="majorAxisRadius" type="Double">10000.0</property>
<property name="rotation" type="Double">0.0</property>
<property name="units" type="String">Meters</property>
<property name="wkidbuffer" type="Integer">3595</property>
<property name="minorAxisRadius" type="Double">5000.0</property>
<property name="wkidout" type="Integer">4326</property>
<property name="wkidin" type="Integer">3595</property>
<property name="minorAxisSource" type="String">Event</property>
<property name="majorAxisEvent" type="String">semimajor</property>
<property name="majorAxisSource" type="String">Event</property>
<property name="minorAxisEvent" type="String">semiminor</property>
</properties>
</processor>
</node>
<node name="f4d8ccab-55e2-47ea-83c7-9320e303ebba" label="(Center Point) Stream Schema" left="210" top="30" width="200" height="40">
<processor uri="com.esri.ges.processor/FieldMapper/10.6.0">
<properties>
<property name="inputFields" type="String">id,geometry</property>
<property name="outputFields" type="String">id,geometry</property>
<property name="inputGeoEventDefinition" type="GeoEventDefinition">EllipseCalculator-Parameters</property>
<property name="outputGeoEventDefinition" type="GeoEventDefinition">StreamService-PointBroadcast</property>
</properties>
</processor>
</node>
</nodes>
<flow>
<from ref="cbb16d04-039b-4954-8125-58177b71acb7" label="rest-json-in">
<to ref="f4d8ccab-55e2-47ea-83c7-9320e303ebba" label="(Center Point) Stream Schema"/>
<to ref="fdd875ad-b7fc-4d63-8ee9-f954da753016" label="Calculate AOU"/>
</from>
<from ref="54e27398-c945-4b71-86dd-5054e9240847" label="(Ellipse) Stream Schema">
<to ref="bfaa113f-4284-447d-8fd3-444962bd0379" label="EllipseBroadcast"/>
</from>
<from ref="fdd875ad-b7fc-4d63-8ee9-f954da753016" label="Calculate AOU">
<to ref="cad802bf-52cb-493f-8fb4-d2331340d550" label="file-json-out"/>
<to ref="54e27398-c945-4b71-86dd-5054e9240847" label="(Ellipse) Stream Schema"/>
</from>
<from ref="f4d8ccab-55e2-47ea-83c7-9320e303ebba" label="(Center Point) Stream Schema">
<to ref="6cb3a7b7-2093-45d7-8de2-a545a8dca8f7" label="PointBroadcast"/>
</from>
</flow>
<geoEventsReceivedRateRange max="0.0" min="0.0"/>
<geoEventsSentRateRange max="0.0" min="0.0"/>
</geoEventService>
</geoEventServices>
<inputs>
<input url="http://raistlin.esri.com:6180/geoevent/rest/receiver/rest-json-in" clusterCommand="START" connector="esri-receive-json-rest-in" connectorLabel="Receive JSON on a REST Endpoint" label="rest-json-in" name="cbb16d04-039b-4954-8125-58177b71acb7" runningState="STARTED" statusDetails="NULL" supportsAllGeoEventDefinitions="true">
<adapter uri="com.esri.ges.adapter.inbound/Generic-JSON/10.6.0">
<properties>
<property name="SpatialReferenceField" type="String"></property>
<property name="YGeometryField" type="String"></property>
<property name="CreateGeoEventDefinition" type="Boolean">false</property>
<property name="isLearningMode" type="Boolean">false</property>
<property name="ExistingGeoEventDefinitionName" type="GeoEventDefinition">EllipseCalculator-Parameters</property>
<property name="ZGeometryField" type="String"></property>
<property name="NewGeoEventDefinitionName" type="String">Generated-GeoEventDefinition</property>
<property name="asGeoJson" type="Boolean">false</property>
<property name="BuildGeometryFromFields" type="Boolean">false</property>
<property name="CustomDateFormat" type="String"></property>
<property name="JsonObjectName" type="String"></property>
<property name="XGeometryField" type="String"></property>
</properties>
</adapter>
<geoEventDefinitionHistory>
<guid>b70b6205-425f-4d45-a801-8baab650455e</guid>
</geoEventDefinitionHistory>
<geoEventsRateRange max="0.0" min="0.0"/>
<supportedGeoEventDefinitions/>
<transport uri="com.esri.ges.transport.inbound/HTTP/10.6.0">
<properties>
<property name="headers" type="String"></property>
<property name="getRequestRawDataFieldName" type="String"></property>
<property name="acceptableMimeTypesServerMode" type="String">application/json</property>
<property name="clientURL" type="String"></property>
<property name="httpAppendToEnd" type="String"></property>
<property name="postContentType" type="String"></property>
<property name="clientPostBody" type="String"></property>
<property name="acceptableMimeTypesClientMode" type="String"></property>
<property name="httpMethod" type="String">GET</property>
<property name="httpTimeoutValue" type="Integer">30</property>
<property name="useLongPolling" type="Boolean">false</property>
<property name="clientURLProxy" type="String"></property>
<property name="frequency" type="Integer">5</property>
<property name="mode" type="String">SERVER</property>
<property name="honorLastModified" type="Boolean">true</property>
<property name="clientPostFrom" type="String">TEXT</property>
<property name="clientPostParameters" type="String"></property>
<property name="useClientURLProxy" type="Boolean">false</property>
<property name="clientParameters" type="String"></property>
<property name="getRequestIncludesRaw" type="Boolean">false</property>
</properties>
</transport>
</input>
</inputs>
<outputs>
<output clusterCommand="START" connector="esri-out-feature-stream-service" connectorLabel="Send Features to a Stream Service" label="EllipseBroadcast" name="bfaa113f-4284-447d-8fd3-444962bd0379" runningState="STARTED" statusDetails="The GeoEvent Definition "FeatureRecord-Inbound" is incompatible with the Stream Service JsonReceiver-EllipseBroadcast. There is at least one field in the GeoEvent that does not exist in the service." supportsAllGeoEventDefinitions="true">
<adapter uri="com.esri.ges.adapter.outbound/JSON/10.6.0">
<properties>
<property name="updateInterval" type="String">0.01</property>
<property name="flattenEvents" type="Boolean">true</property>
<property name="keepEventsUnique" type="Boolean">false</property>
<property name="mimeType" type="String">application/json</property>
<property name="prettyJson" type="Boolean">false</property>
</properties>
</adapter>
<geoEventDefinitionHistory>
<guid>03e85083-1c06-4dfa-b334-2619e1acd20d</guid>
<guid>911e9c21-9053-4fee-9166-ff80449f0e61</guid>
<guid>eb602ec9-6ebe-44ca-9327-d84107d5bfeb</guid>
<guid>45eedabc-f6af-461c-9b52-348eebe27a54</guid>
<guid>c212e56e-3589-43a8-b679-8422c9e97e85</guid>
</geoEventDefinitionHistory>
<geoEventsRateRange max="0.0" min="0.0"/>
<supportedGeoEventDefinitions/>
<transport uri="com.esri.ges.transport.outbound/StreamService/10.6.0">
<properties>
<property name="path" type="ArcGISFolder">/</property>
<property name="datastore" type="ArcGISConnection">default</property>
<property name="geoEventDefinitionName" type="GeoEventDefinition"></property>
<property name="serviceName" type="ArcGISStreamService">JsonReceiver-EllipseBroadcast</property>
</properties>
</transport>
</output>
<output clusterCommand="START" connector="esri-out-json-file-log" connectorLabel="Write to a JSON File" label="file-json-out" name="cad802bf-52cb-493f-8fb4-d2331340d550" runningState="STARTED" statusDetails="NULL" supportsAllGeoEventDefinitions="true">
<adapter uri="com.esri.ges.adapter.outbound/Generic-JSON/10.6.0">
<properties>
<property name="mimeType" type="String">application/json</property>
<property name="prettyJson" type="Boolean">true</property>
</properties>
</adapter>
<geoEventDefinitionHistory>
<guid>b70b6205-425f-4d45-a801-8baab650455e</guid>
</geoEventDefinitionHistory>
<geoEventsRateRange max="0.0" min="0.0"/>
<supportedGeoEventDefinitions/>
<transport uri="com.esri.ges.transport.outbound/File/10.6.0">
<properties>
<property name="outputFolderDataStore" type="FolderDataStore">8cb0049f-efa0-4fb4-8fd9-4372e6d848ad</property>
<property name="outputFilesShouldExpire" type="String">Delete</property>
<property name="outputFileExtension" type="String">json</property>
<property name="outputFileSizeLimitValue" type="Integer">1</property>
<property name="outputFileFooter" type="String">]</property>
<property name="outputBaseFileName" type="String">GenericJson-</property>
<property name="outputFileEventSeparator" type="String">,</property>
<property name="outputExpirationValueInMinutes" type="Integer">4320</property>
<property name="outputFileHeader" type="String">[</property>
<property name="outputFileFrequency" type="String">Monthly</property>
<property name="outputDirectory" type="String"></property>
<property name="outputFileSizeLimitMethod" type="String">By Time</property>
<property name="outputArchiveLocation" type="String"></property>
<property name="outputArchiveDataStore" type="FolderDataStore">8cb0049f-efa0-4fb4-8fd9-4372e6d848ad</property>
</properties>
</transport>
</output>
<output clusterCommand="START" connector="esri-out-feature-stream-service" connectorLabel="Send Features to a Stream Service" label="PointBroadcast" name="6cb3a7b7-2093-45d7-8de2-a545a8dca8f7" runningState="STARTED" statusDetails="The GeoEvent Definition "FeatureRecord-Inbound" is incompatible with the Stream Service JsonReceiver-PointBroadcast. There is at least one field in the GeoEvent that does not exist in the service." supportsAllGeoEventDefinitions="true">
<adapter uri="com.esri.ges.adapter.outbound/JSON/10.6.0">
<properties>
<property name="updateInterval" type="String">0.01</property>
<property name="flattenEvents" type="Boolean">true</property>
<property name="keepEventsUnique" type="Boolean">false</property>
<property name="mimeType" type="String">application/json</property>
<property name="prettyJson" type="Boolean">false</property>
</properties>
</adapter>
<geoEventDefinitionHistory>
<guid>911e9c21-9053-4fee-9166-ff80449f0e61</guid>
<guid>03e85083-1c06-4dfa-b334-2619e1acd20d</guid>
<guid>45eedabc-f6af-461c-9b52-348eebe27a54</guid>
<guid>176035f0-9b44-4c50-9146-20a3bf0768e1</guid>
</geoEventDefinitionHistory>
<geoEventsRateRange max="0.0" min="0.0"/>
<supportedGeoEventDefinitions/>
<transport uri="com.esri.ges.transport.outbound/StreamService/10.6.0">
<properties>
<property name="path" type="ArcGISFolder">/</property>
<property name="datastore" type="ArcGISConnection">default</property>
<property name="geoEventDefinitionName" type="GeoEventDefinition"></property>
<property name="serviceName" type="ArcGISStreamService">JsonReceiver-PointBroadcast</property>
</properties>
</transport>
</output>
</outputs>
<geoEventDefinitions>
<geoEventDefinition guid="b70b6205-425f-4d45-a801-8baab650455e" name="EllipseCalculator-Parameters" owner="admin" accessType="editable">
<fieldDefinitions>
<fieldDefinition name="center_x" type="Double" cardinality="One">
<fieldDefinitions/>
</fieldDefinition>
<fieldDefinition name="center_y" type="Double" cardinality="One">
<fieldDefinitions/>
</fieldDefinition>
<fieldDefinition name="wkid" type="String" cardinality="One">
<fieldDefinitions/>
</fieldDefinition>
<fieldDefinition name="semimajor" type="Double" cardinality="One">
<fieldDefinitions/>
</fieldDefinition>
<fieldDefinition name="semiminor" type="Double" cardinality="One">
<fieldDefinitions/>
</fieldDefinition>
<fieldDefinition name="rotation_angle" type="Double" cardinality="One">
<fieldDefinitions/>
</fieldDefinition>
<fieldDefinition name="id" type="String" cardinality="One">
<fieldDefinitionTag>
<name>TRACK_ID</name>
</fieldDefinitionTag>
<fieldDefinitions/>
</fieldDefinition>
<fieldDefinition name="geometry" type="Geometry" cardinality="One">
<fieldDefinitionTag>
<name>GEOMETRY</name>
</fieldDefinitionTag>
<fieldDefinitions/>
</fieldDefinition>
</fieldDefinitions>
</geoEventDefinition>
<geoEventDefinition guid="c212e56e-3589-43a8-b679-8422c9e97e85" name="StreamService-EllipseBroadcast" owner="admin" accessType="editable">
<fieldDefinitions>
<fieldDefinition name="id" type="String" cardinality="One">
<fieldDefinitionTag>
<name>TRACK_ID</name>
</fieldDefinitionTag>
<fieldDefinitions/>
</fieldDefinition>
<fieldDefinition name="geometry" type="Geometry" cardinality="One">
<fieldDefinitionTag>
<name>GEOMETRY</name>
</fieldDefinitionTag>
<fieldDefinitions/>
</fieldDefinition>
</fieldDefinitions>
</geoEventDefinition>
<geoEventDefinition guid="176035f0-9b44-4c50-9146-20a3bf0768e1" name="StreamService-PointBroadcast" owner="admin" accessType="editable">
<fieldDefinitions>
<fieldDefinition name="id" type="String" cardinality="One">
<fieldDefinitionTag>
<name>TRACK_ID</name>
</fieldDefinitionTag>
<fieldDefinitions/>
</fieldDefinition>
<fieldDefinition name="geometry" type="Geometry" cardinality="One">
<fieldDefinitionTag>
<name>GEOMETRY</name>
</fieldDefinitionTag>
<fieldDefinitions/>
</fieldDefinition>
</fieldDefinitions>
</geoEventDefinition>
</geoEventDefinitions>
<tags/>
<folderDataStores>
<folderDataStore accessType="editable" canRead="true" canWrite="true" exists="true" label="GeoEvent_Output" name="8cb0049f-efa0-4fb4-8fd9-4372e6d848ad" path="C:\GeoEvent\output">
<details></details>
</folderDataStore>
</folderDataStores>
</template>
... View more
01-17-2018
06:29 PM
|
1
|
0
|
4032
|
|
POST
|
Hey Brian - First things first, let's make sure we're both looking at the same GitHub repository. The bug filed 02-Sept-2016 with Esri Support (BUG-000099124) was closed Dec-2017 with a remark 'Will Not Be Addressed'. Looking over its notes I see a link to an old Defense Solutions repo (no longer being maintained): solutions.arcgis.com/defense/templates/geoevent-extension The repository currently being maintained is: defense-solutions-proofs-of-concept/blob/master/geoevent-components I asked Hanoch Kalmanovich to compile a *.jar for me for the Ellipse Calculator (Defense Solutions is no longer maintaining pre-compiled JAR with the Git resources). He compiled the custom processor using the 10.5.0 GeoEvent SDK. I was able to add the JAR to a 10.6 release of GeoEvent Server without a problem. When I attempted to reproduce the issue I found that ArcMap's GP Tool (Data Management > Table to Ellipse) produced consistent results with the custom processor I had added to GeoEvent Server. Here are my reproduction steps: 1) Create the following non-spatial table in a file geodatabase and run the 'Table to Ellipse' tool Notice that the coordinate values are in a state plane projected coordinate system. I chose a location in the northern part of Minnesota to emphasize elliptic distortion, if that was going to be a factor. 2) Publish the Ellipse feature class (above) as a feature service so I could add the feature to a web map for display. 3) Configure the following GeoEvent Service. I'll try to attach an XML of the GeoEvent Server configuration in case you want to take a look at input / output configurations or GeoEvent Definitions ... but GeoNet is making that difficult. The purpose of this GeoEvent Service is to broadcast a received Point geometry to a stream layer, use the Ellipse Calculator to compute an area-of-uncertainty from received event attributes (semi minor axis, rotation angle, etc.) and then stream the Polygon geometry to a second stream layer. Notice that I have configured the processor to expect the input geometry in the state plane coordinate system appropriate for the area of interest and to use that same SPCS for the spatial analysis. (The output is GCS WGS 1984; the stream service would have projected the geometry to this SR in any case.) 4) Add the two stream services as new layer to the web map displaying the Ellipse feature service (created using ArcMap's GP Tool) ... then HTTP/POST the following JSON to the GeoEvent Server's input to see the geometries processed by GeoEvent overlaid on the web map. [ { "center_x": 697182.8, "center_y": 289173.3, "wkid": "3595", "semimajor": 1000, "semiminor": 375, "rotation_angle": 60, "id": "WKID_3595", "geometry": { "x": 697182.8, "y": 289173.3, "spatialReference": { "wkid": 3595 } } } ] Notice the coordinate values are expressed in the state plane projected coordinate system (WKID 3595). The only difference between this JSON data and the data in the non-spatial table is that the semimajor and semiminor values have been cut in half ... since the Ellipse Calculator wants the radius and the ArcMap's GP Tool takes the full diameter. I allow the Ellipse Calculator to overwrite the received Point geometry with the polygon it computes. Looking at the two ellipse polygon geometries in the web map, they align almost perfectly. Zooming in there is a discrepancy of about 12 meters where the two ellipse's don't align perfectly: I'm going to chalk that difference up to projection of the geometries. The ellipse created by ArcMap's GP Tool was created with a native spatial reference appropriate for the area of interest (WKID 3595) whereas the ellipse created by GeoEvent Server's custom processor was calculated in that coordinate system, but then projected to GCS WGS 1984 for broadcast by the stream service. Both were then projected, on-the-fly, by the web map to Web Mercator for display. Hanoch can dig into the Ellipse Calculator's implementation in GitHub if we still think there's a defect there. But it looks to me like the processor is working as its contributor intended. Please let me know if you disagree. Cheers -- RJ
... View more
01-17-2018
06:20 PM
|
0
|
1
|
4032
|
|
POST
|
Hello Elle / Xander - Your options for adding and updating a track line as a Polyline feature record have not changed. In the thread Xander Bakker references, Generating Tracks from Events (April 2014), I mentioned a processor we were considering that would do this for you. The "reconstruct tracks" processor ended up being implemented as part of GeoAnalytics Server -- not GeoEvent Server. You can read more about that capability here: Reconstruct Tracks In that same thread I suggested using an Incident Detector to help create your track line. That is still an option: Please see my update to theRe: Generating Tracks from Events thread. Using an Incident Detector this way is a very bad idea. You would select Polyline for the processor's Geometry Type to configure the processor to build and update a polyline rather than point features. You will also need to make sure that the Incident Type is Cumulative (not PointInTime) ... and set the processor's Expiry Time to a sufficiently high value that the incident will not be automatically closed when no updates are received for a period of time; the default is 300 seconds (5 minutes). GeoEvent Server Inbound connectors, such as Receive JSON on a REST Endpoint, offer the ability to Construct Geometry From Fields, but this is necessarily limited to Point feature geometry with a single X / Y coordinate value pair. The GeoEvent Server input cannot iterate over an array of coordinate values to build out a polyline or a polygon. Your only other option, using GeoEvent Server, would be to incorporate a series of Field Calculator processors into a GeoEvent Service to perform specific string manipulations and transform coordinate information from a received event record into a JSON string representation of an Esri Polyline or Polygon geometry. The GeoNet thread How to switch positions on coordinates provides an example of how you might approach this. The specification for the Esri Feature JSON can be found beneath the ArcGIS REST API Geometry objects topic. Please also see comments from Tanu Hoque and Thomas Colson in the thread Tracking Analyst in Pro. Thomas offers an approach using SQL to create a time ordered set of GPS points which can be used as vertices to create a polyline. Tanu includes animated illustrations of how he got this to work. Hope this information was helpful -- RJ
... View more
01-16-2018
01:43 PM
|
2
|
0
|
3961
|
|
POST
|
Blog has been posted: https://community.esri.com/community/gis/enterprise-gis/geoevent/blog/2018/01/09/howto-administratively-reset-geoevent-server-105-1051-106?sr=search&searchId=bed685c0-4d08-4e64-a053-c76af2ac2796&searchIndex=0
... View more
01-08-2018
04:17 PM
|
2
|
5
|
6694
|
|
POST
|
Hello Jason - The fixes were all there in the forums, spread out a bit, and outdated with the locations of zookeeper. I feel like I need to apologize. It must seem like we're changing our integration with zookeeper every release ... And true to form, at the 10.6 release, the location of the zookeeper files will be changing again. At the 10.5 / 10.5.1 release GeoEvent Server uses the Zookeeper platform service provided by ArcGIS Server for its distributed config store The Zookeeper files are found in the ArcGIS Server's 'local' directory: e.g. C:\arcgisserver\local\zookeeper Beginning with the 10.6 release GeoEvent Server is introducing a new architectural component: The GeoEvent Gateway Look for a "What's New" help topic in the to-be-released 10.6 on-line documentation after 9-Jan-2018 http://enterprise.arcgis.com/en/geoevent/latest/get-started/whats-new-in-geoevent-server.htm That should be the final public link, but it's not yet been pushed for public release, so I can't be sure. What's Changing ... GeoEvent Gateway will incorporate a message broker (Apache Kafka) and distributed config store (Apache ZK) ArcGIS Server will still provide its platform service, but GeoEvent Server isn't using that anymore. You'll still find ZK files beneath C:\arcgisserver\local\zookeeper, but those are not the droids you looking for The GeoEvent Server's zookeeper files will be found beneath C:\ProgramData\Esri\GeoEvent-Gateway e.g. C:\ProgramData\Esri\GeoEvent-Gateway\zookeeper-data I'll try to prepare a blog that pulls together the steps for administratively resetting GeoEvent Server, by deleting its data\ files, deleting its zookeeper\ files, deleting the new GeoEvent-Gateway\ files (at 10.6) ... and provide clear steps with correct paths for both 10.5 / 10.5.1 and the 10.6 product releases. I'll add a comment to this thread with a link to that blog when it's available. - RJ
... View more
01-04-2018
04:16 PM
|
2
|
6
|
6694
|
|
POST
|
Hello Josh - That is correct. The Portal and ArcGIS Online implementations of the JavaScript API's StreamLayer have not changed. You can use the web map interface to change the stream layer's point symbology to apply a different fill or outline color, you can select a symbol from any of the provided Categories ('Shapes', 'Outdoor Recreation', 'Transportation', etc.) or browse to select a PNG, GIF, or JPG image from your local server to use as a simple marker symbol. You cannot use an attribute from the feature record broadcast by the stream service to apply unique value rendering in order to symbolize 'Inspection' vehicles differently from 'Service' vehicles. You would have to either filter server-side to have a stream service broadcast only 'Inspection' vehicle records, and add that stream service to your web map as a stream layer ... or filter client-side and have the web map specify to the stream service that is only wanted to receive feature records whose TYPE attribute was 'Inspection'. There is no way to set symbology server-side. The feature records broadcast by a stream service do not include any symbology information. (If you examine the drawingInfo property in a stream service's JSON specification you will notice that there are some default properties for symbology. The web map uses this when the stream layer is first added to the map, which is why you see the default blue esriSMSCircle symbols.) James provided a link to samples within the 3.23 release of the JavaScript API for creating a unique value renderer: Unique value renderer | ArcGIS API for JavaScript I don't believe that you can extend the out-of-the-box Portal or ArcGIS Online StreamLayer implementations. You would have to develop your own custom web mapping application which implements capabilities exposed by the JavaScript API's StreamLayer class which Portal and ArcGIS Online web maps do not implement. Folks on the ArcGIS API for JavaScript can provide advice on how to do this. - RJ
... View more
01-03-2018
05:42 PM
|
0
|
2
|
5181
|
|
POST
|
Hello Cassidy -- I've replied to your comments on field enrichment of multiple attributes based on a spatial query? If I understand the question you are asking here, you want to detect when at least two assets are within a work area and update a feature attribute which allows that area to be displayed as "cleared". For this case, I would recommend taking a look at a scenario / demo illustrated in one of our technical workshops. Here's the URL: GeoEvent Server: Applying Real-Time Analytics - YouTube Jump forward to minute 27:05 ... the scenario I'm fast forwarding to suggests that if you were to ingest the GPS event records from your assets and broadcast those via a stream service, you could synchronize a set of dynamic (point) geofences. You could then periodically poll the (polygon) feature service in which you were maintaining your work area features to process *those* event records separately and use a GeoTagger to detect spatial coincidence with one or more positions of tracked assets. The scenario goes on to show how you could use a Field Calculator expression to count the number of asset positions (geofences) which intersect the polled work area feature record. I would probably recommend using a Field Mapper to strip unwanted fields from a polled work area feature record, so that I had only a asset_count attribute and a unique identifier of the work area. I would allow the GeoTagger to create a field -- which coincidentally exists as an attribute field in the work area feature records -- then use a Field Calculator to write a count of the asset identifiers found inside the area to the asset_count. You can use an add/update output to update just the assets_list and the asset_count in the feature class ... and filters to discover if there are "less than two" or "two or more" assets working the area, and update a feature overlay accordingly. -- RJ
... View more
12-12-2017
02:25 PM
|
1
|
0
|
1683
|
|
POST
|
Hello Cassidy -- What I think Ben Nadler was originally asking in his post field enrichment of multiple attributes based on a spatial query? is not what you are looking for. If I understand your question, you want to detect when at least two assets are within a work area and update a feature attribute which allows that area to be displayed as "cleared". In any case, the workflow described in that thread -- use a GeoTagger to obtain an attribute value that can be used as a primary join field, then a Field Enricher to enrich an event record with attribute (or geometry) from a feature record -- is still your only way to detect spatial coincidence and enrich event records with related feature records. The functionality Ben is asking for, a processor that can perform a spatial join, has not been implemented. I'll reply to your original question, https://community.esri.com/message/727624-how-to-update-an-attribute-of-a-feature-based-on-a-geoevent?sr=search&searchId=19c59ece-a985-4d7d-83db-5e889b5e1520&searchIndex=3 as part of its thread. -- RJ
... View more
12-12-2017
02:15 PM
|
0
|
0
|
2426
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 02-11-2026 11:38 AM | |
| 1 | 02-11-2026 10:38 AM | |
| 1 | 01-05-2023 11:37 AM | |
| 1 | 02-20-2025 03:50 PM | |
| 1 | 08-31-2015 07:23 PM |
| Online Status |
Offline
|
| Date Last Visited |
05-21-2026
12:39 PM
|