|
POST
|
Elliott - Please take a look at an update I just posted to the thread Re: How to switch positions on coordinates. There is no clean way, using a GeoEvent input's Construct Geometry From Fields capability, to create a polyline or polygon Geometry. The input is only able to take two values, an X coordinate and a Y coordinate, and create a point Geometry. It cannot iterate over a list of coordinates, extract values from different positions in the array, and build a string representation of a polyline or polygon Geometry. However, because the event data in your file is nearly already formatted as Esri Feature JSON, you can do what you are trying to do without too much effort. What you're missing is a leading {"paths": on the front of your quoted string. The JSON you illustrated, the structure in the file your input is reading, has a value named paths, but the value of paths is just the bracketed JSON. Rather than using a file input, I am going to use an Receive JSON on a REST Endpoint input to HTTP/POST the data you illustrated to a GeoEvent Service. The only change I made to the data was to explicitly quote the value [[[114.1, ... -20.0]]] to designate that it is a String value. [{
"items": {
"paths" : "[[[114.1,-20.0], [114.2,-20.0], [114.3,-20.0]]]",
"title": "Hugin Explorer",
"updated_utc": 1449479650000
}
}] Here's the GeoEvent Service: And here's the expression in the Field Calculator: '{"paths":' + paths + '}' Like in the thread I reference above, the Field Mapper processor is simply mapping the computed String to a field of type Geometry. The coordinates (114.1, -20.0) locate the polyline off the coast of Australia, northwest of the Hamersley Range. If that's not correct you could either flip the coordinates in your input file so that they are X, Y ... or if you have to ... use the regular expression magic illustrated in the other thread and configure a Field Calculator do that for you. Hope this information helps - RJ
... View more
03-31-2016
06:38 PM
|
0
|
0
|
1953
|
|
POST
|
Erik - I ran across a post from Maarten Tromp in the following thread: Swap coordinate pairs in a Polygon. Taking what he suggested, here is an approach you can follow using GeoEvent out-of-the-box without having to resort to developing a custom processor. Given: A portion of an input stream with comma separated pairs of coordinate values and a space between each pair of coordinates. Example: 57.711279,12.523986 57.635773,12.459618 57.576614,12.436624 57.711279,12.523986 First you need to reverse each coordinate pair. I used an Receive JSON on a REST Endpoint input to HTTP/POST the following JSON to a GeoEvent Service: {
"trackid": "AA-1234",
"coordinates": "57.711279,12.523986 57.635773,12.459618 57.576614,12.436624 57.711279,12.523986"
} Use a Field Calculator processor with the following expression to accomplish this: Expression: replaceAll(coordinates,'([-]*[0-9]+\.[0-9]+?),([-]*[0-9]+(\.[0-9]+)?)','$2,$1') Notice that the regular expression I used supports an optional negative sign in front of each coordinate value. A site you might want to bookmark to learn about and experiment with regular expressions is: regex101.com Next you need to replace the literal space between each coordinate pair with a literal string ],[ to format the coordinate values as a set of nested JSON arrays and bracket the beginning and end of the string with [[ and ]]. Note that the RegEx pattern matching the beginning of a line is ^. The RegEx pattern for matching the end of a line is $. Expression: replaceAll(coordinates,' ','],[') Expression: replaceAll(coordinates,'^','[[') Expression: replaceAll(coordinates,'$',']]') Your GeoEvent Service so far looks like: And is producing output which looks like: Now you need to complete the formatting of your coordinate string to create a string representation of a Geometry. For this step I chose to copy the GeoEvent Definition used by the PolygonCoordinatesFeed input and add a field named GeomString. A Field Maper processor maps the existing coordinates and trackid into the new event structure leaving GeomString unmapped. Another Field Calculator processor will write its result into this new field. I do this so that the Field Calculator can write to an existing field without having to create an event defintion on-the-fly in order to write to a new field. Here is the expression used in this most recent Field Calculator processor: '{"rings":[' + coordinates + '],"spatialReference":{"wkid":4326}}' What I'm doing here is prepending a literal string {"rings":[ to the coordinates value and appending a literal string ],"spatialReference":{"wkid":4326}} to the end of the string. A final Field Mapper takes the event structure with the string representation of the Geometry and maps it to a field named Geometry. I now have an event with a field named trackid and a field named Geometry which I can send to a stream service to display the Geometry I've computed from the coordinate values received from the original feed. Here's my final GeoEvent Service: I've attached an XML export of this configuration for both the 10.3.1 and 10.4 product releases. You will, of course, need to fix any validation errors by publishing your own stream service or switching to use a different output connector if you want to import this configuration. Hope this information in helpful - RJ
... View more
03-31-2016
05:43 PM
|
2
|
0
|
4974
|
|
POST
|
Hello Alena - I see several references to SOAP in the XML you included in the body of your post. While SOAP is XML ... it is not the sort of XML the GeoEvent 'Receive XML on a REST Endpoint' input expects to recieve. Please take a look at the thread SOAP Input for some notes on the differences between the JSON expected from a REST request and the XML response expected from a SOAP request. You might also find the discussion on the thread Re: XML to Geoevent and Convert string to geometry helpful. The GeoEvent XML inbound adapter actually attempts to convert XML it receives to JSON using a 3rd party library. This can present some challenges, especially if the names of attributes within a tag conflict with other tags in the XML structure. Here's some sample XML which can be posted to a GeoEvent 'Receive XML on a REST Endpoint' input. <?xml version="1.0" encoding="utf-8"?>
<assetLocationUpdate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://sky.customer.com/linehaulAutomation/schema">
<userId xmlns="http://sky.customer.com/linehaulAutomation/techarch/schema">LocationDataServer</userId>
<userLocation xmlns="http://sky.customer.com/linehaulAutomation/techarch/schema">9999</userLocation>
<transmitDate xmlns="http://sky.customer.com/linehaulAutomation/techarch/schema">2014-05-30T18:11:01Z</transmitDate>
<locatorId xmlns="">10027878</locatorId>
<dateUTC xmlns="">2014-05-30T18:11:00Z</dateUTC>
<coordinate xmlns="">
<latitude xmlns="http://sky.customer.com/linehaulAutomation/common/schema">35.7336426</latitude>
<longitude xmlns="http://sky.customer.com/linehaulAutomation/common/schema">-80.85889</longitude>
</coordinate>
<altitude xmlns="">272</altitude>
<bearing xmlns="">174</bearing>
<speed xmlns="">0</speed>
<odometer xmlns="">195638910</odometer>
<powerPresent xmlns="">true</powerPresent>
<vehicleVoltage xmlns="">13.115</vehicleVoltage>
<batteryVoltage xmlns="">4.447</batteryVoltage>
<batteryRemaining xmlns="">100</batteryRemaining>
<batteryDaysRemaining xmlns="">42</batteryDaysRemaining>
<temperature xmlns="">37</temperature>
<radioRssi xmlns="">-77</radioRssi>
<messageReason xmlns="">1</messageReason>
<geofenceId xmlns="">0</geofenceId>
<analogInput xmlns="">0.027</analogInput>
<digitalIO1 xmlns="">false</digitalIO1>
<digitalIO2 xmlns="">false</digitalIO2>
<digitalIO3 xmlns="">false</digitalIO3>
<gpsSatelliteCount xmlns="">7</gpsSatelliteCount>
<firmwareVersion xmlns="">118</firmwareVersion>
<configVersion xmlns="">8</configVersion>
<geofenceHash xmlns="">666094417</geofenceHash>
</assetLocationUpdate>
Using the assetLocationUpdate tag as the root node, notice how the sample XML structure above translates into JSON: [{
"batteryDaysRemaining" : {
"content" : 42,
"xmlns" : ""
},
"locatorId" : {
"content" : 10027878,
"xmlns" : ""
},
"altitude" : {
"content" : 272,
"xmlns" : ""
},
"digitalIO3" : {
"content" : false,
"xmlns" : ""
},
"digitalIO2" : {
"content" : false,
"xmlns" : ""
},
"dateUTC" : {
"content" : 1401473460000,
"xmlns" : ""
},
"batteryVoltage" : {
"content" : 4.447,
"xmlns" : ""
},
"digitalIO1" : {
"content" : false,
"xmlns" : ""
},
"transmitDate" : {
"content" : 1401473461000,
"xmlns" : "http://sky.customer.com/linehaulAutomation/techarch/schema"
},
"temperature" : {
"content" : 37.0,
"xmlns" : ""
},
"userLocation" : {
"content" : "9999",
"xmlns" : "http://sky.customer.com/linehaulAutomation/techarch/schema"
},
"userId" : {
"content" : "LocationDataServer",
"xmlns" : "http://sky.customer.com/linehaulAutomation/techarch/schema"
},
"firmwareVersion" : {
"content" : 118,
"xmlns" : ""
},
"messageReason" : {
"content" : 1,
"xmlns" : ""
},
"vehicleVoltage" : {
"content" : 13.115,
"xmlns" : ""
},
"radioRssi" : {
"content" : -77,
"xmlns" : ""
},
"xmlns:xsd" : "http://www.w3.org/2001/XMLSchema",
"geofenceHash" : {
"content" : 666094417,
"xmlns" : ""
},
"speed" : {
"content" : 0.0,
"xmlns" : ""
},
"coordinate" : {
"longitude" : {
"content" : -80.85889,
"xmlns" : "http://sky.customer.com/linehaulAutomation/common/schema"
},
"latitude" : {
"content" : 35.7336426,
"xmlns" : "http://sky.customer.com/linehaulAutomation/common/schema"
},
"xmlns" : ""
},
"odometer" : {
"content" : 195638910,
"xmlns" : ""
},
"xmlns" : "http://sky.customer.com/linehaulAutomation/schema",
"gpsSatelliteCount" : {
"content" : 7,
"xmlns" : ""
},
"analogInput" : {
"content" : 0.027,
"xmlns" : ""
},
"bearing" : {
"content" : 174,
"xmlns" : ""
},
"xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance",
"batteryRemaining" : {
"content" : 100.0,
"xmlns" : ""
},
"configVersion" : {
"content" : 8,
"xmlns" : ""
},
"geofenceId" : {
"content" : 0,
"xmlns" : ""
},
"powerPresent" : {
"content" : true,
"xmlns" : ""
}
}] Hope this information is helpful - RJ
... View more
03-30-2016
05:51 PM
|
0
|
0
|
1115
|
|
POST
|
John - My apologies that your post from December went so long without a response. I've reproduced the behavior you describe above in the 10.4 product release. For input, I chose to poll a feature service's polyline feature layer and published a GeoEvent Service whose Intersector spatial processor should have generated a Geometry representing the intersection with polyline features I had imported as GeoFences. I can obtain the expected results from the Intersector processor when the GeoFences are polygons and the received event's Geometry is one order lower (a polyline) as illustrated in the product introduction tutorial. However, I believe what you're trying to do is supposed to work. I've submitted a bug for the developer to investigate. - RJ
... View more
03-25-2016
03:15 PM
|
0
|
1
|
1036
|
|
BLOG
|
A Web Adaptor is requried for Portal, but optional for Server. All of the training and presentations I have attended have a Web Adaptor installed and configured for Portal and a second Web Adaptor installed and configured for Server (you can install Web Adaptor multiple times on a single machine). Assuming that you had two machines (WEBGIS and REALTIME) on your local domain (ARMY.MIL) you might configure access to your Portal / Server / GeoEvent endpoints as follows: WEBGIS (Your WebGIS machine) Portal Home https://webgis.army.mil/portal/home/ Server Manager https://webgis.army.mil:6443/arcgis/manager/ Server REST Services Directory https://webgis.army.mil/server/rest/ In the examples above, the Web Adaptors were configured with the names 'portal' and 'server'. Notice that administrative access has been disabled in the Web Adaptor configuration for Server, which is why you need to specify port 6443 and the default .../arcgis pathname when accessing Server Manager. REALTIME (Your Server/GeoEvent machine) Server Manager https://realtime.army.mil:6443/arcgis/manager/ GeoEvent Manager https://realtime.army.mil:6143/geoevent/manager/ Since GeoEvent is not supported by the Web Adaptor, and we generally recommend that you not access Server Manager through a Web Adaptor, the last two URL examples above don't use a Web Adaptor. In fact, Web Adaptor is not even installed on the REALTIME server in the BDS system architecture presented in the tutorial. - RJ
... View more
03-22-2016
03:09 PM
|
1
|
0
|
1403
|
|
BLOG
|
The GeoEvent product team would like to announce the release of a new tutorial introducing the Spatiotemporal Big Data Store. The tutorial is available on the GeoEvent product gallery with our other product tutorials. Here is a direct link to the new tutorial: Tutorial - Spatiotemporal Big Data store Feedback is welcome. Please add any comments you have to the item in the gallery or send an e-mail to [email protected] Best Regards -- RJ
... View more
03-21-2016
10:05 AM
|
6
|
5
|
6463
|
|
POST
|
The GeoEvent product team would like to announce the release of a new tutorial introducing the Spatiotemporal Big Data Store. The tutorial is available on the GeoEvent product gallery with our other product tutorials. Here is a direct link to the new tutorial: Tutorial - Spatiotemporal Big Data store Feedback is welcome. Please add any comments you have to the item in the gallery or send an e-mail to [email protected] Best Regards -- RJ
... View more
03-21-2016
10:04 AM
|
1
|
1
|
5422
|
|
POST
|
I wanted to take just a moment to follow-up some questions posed by staff attending the inaugural boot camp introducing the new 10.4 Spatiotemporal Big Data Store. The boot camps are not available for delivery as customer training. They are focused opportunities for Esri staff to quickly ramp-up on products so that they can engage with customers, provide advice, and transfer knowledge. If you are reading this as a customer working with Esri staff, mention the boot camps - not everyone knows that they are available. What are the plans, if any, to provide direct connections to Elasticsearch in order to access the underlying data? When will we be able to batch load data into a BDS? Offload/archive data from a BDS to a system off-site? Monitor the activity and what data is actually in each node of a 5-node BDS data ring? There are no current plans to provide customers direct access to the Elasticsearch search server or the underlying Lucene library functions. The BDS is a non-sql database provided as a managed database for archiving and accumulating large volumes of real-time observations, similar to how a PostGRE relational database is provided as a managed database for storing feature data. It is possible to obtain the connection information and connect to the PostGRE RDBMS through an application such as ArcCatalog - but this will not be supported by Esri Technical Support. If your organization already has a high volume of data stored in an Elasticsearch/Lucene solution and you would like help exposing that data through the map services and feature services normally created when creating a new data source in Esri's BDS, it is possible that Esri Professional Services can help you achieve this as a contracted project. The product team anticipates that users will be able to batch load data into an Esri BDS as part of the next major product release (e.g. "10.5") using new functionality being created for GeoAnalytics. We are working now on a solution which will allow data to be offloaded for archival - this should be available as part of the GeoEvent product later this year. There are currently no plans from the GeoEvent product team to design a database monitoring utility for the spatiotemporal big data store. Database administrators familiar with tools such as Apache Ambari or the Splunk App for HadoopOps are asked to work with their Esri technical advisors or account representatives to define product requirements and functionality needed in a "BDS Administration and Monitoring" application which can be communicated to Esri's ArcGIS Data Store product development team. How is the system memory configuration for the BDS exposed? Is this configurable? Given a project which can only deploy a single server machine with 32GB of RAM... It would be nice if we could allocate 6GB to the GeoEvent JVM and no more than 8GB to the BDS process(es) It should be possible to configure memory allocation to the BDS. Shengyao Duan from the ArcGIS Data Store product team will have more information. The product's default (and Esri's recommendation) is that 50% of a server's RAM be allocated to the BDS (up to 32GB). Because the BDS is so memory intensive it is recommended that you install the ArcGIS Data Store and enable the BDS on a dedicated server. Details on a recommended systems architecture for leveraging the spatiotemporal big data store are laid out in a tutorial introducing the product, due to be released very soon. The product team's current recommendation is that a "WebGIS" be built out on one server machine (with Portal, ArcGIS Server as a hosting server, and a relational database as the hosting server's managed geodatabase). A separate "RealTime" server (with a second ArcGIS Server and the GeoEvent Extension) would provide dedicated system resources for real-time event processing, and a third server machine would host the BDS. [ June 22, 2016 ] Randall Whitman - Notes on configuring BDS RAM usage: arcgis/datastore/tools/changedbproperties.bat --store spatiotemporal --heap-size 4096 Say you have a large system of stationary sensors. Since the sensors themselves are not moving, you don’t need to send a Geometry with every event. Could we offer a “Related Features” functionality for BDS like we have for Stream Services? GeoEvent treats Geometry like any other attribute field. So a GeoEvent might have several different fields of type Double, Date, String ... and Geometry. The product team is considering an enhancement which would allow non-spatial tables to be supported in a BDS. However, at the initial release, event records processed through GeoEvent are expected to have a Geometry. The "Related Features" capability provided for stream services is not part of a standard map service or feature service. It's really just a URL provided by the stream service to clients who can use the URL to discover a feature service and perform a join with the non-spatial event in order to "enrich" the event with geometry from features in an external service. This work is all performed within a stream layer - so no - it is unlikely that we will be able to offer a "Related Features" capability for data being stored in a BDS. If every sensor (all 1.7 Million) were sending not just their current reading, but a forecast for each of the next 150 hours, so every two hours you were getting 150 readings from each sensor, any ideas on how we could handle and potentially visualize the inbound data? The GeoAnalytics functionality being developed will provide different ways of aggregating data records retrieved from a BDS. It should be possible to perform statistical aggregation (minimum, maximum, average, etc.) based on an attribute field whereas the initial map service released with the 10.4 product only aggregates based on event count in a grid cell / area. Visualization of multidimensional data, such as an array of predictive values from a single sensor, is intriguing. The GeoEvent team would be interested in discussing how such data would be collected, processed, stored, and visualized as part of next-generation Real-Time GIS development currently underway. Any idea if we’ll be able to enable the BDS using the web form post-install at 10.4.1 rather than dropping down to use a command-line invocation of an administrative batch script? Enablement of a spatiotemporal big data store should be included on web forms provided by the ArcGIS Data Store product for the next software release (e.g. "10.4.1"). The only reason this was not integrated for 10.4 was an internal freeze on user interfaces which occurred before design and development had been completed for the BDS. Please confirm any expected changes to the ArcGIS Data Store with Shengyao Duan. Hope this information is helpful -- RJ
... View more
03-18-2016
02:29 PM
|
7
|
0
|
7904
|
|
POST
|
I'm not an SSL certificates guru, but I believe that you will want to export a domain certificate from your CA (I do this from within IIS) and then import that certificate into both Portal and Server. Do this on the machine that is providing your "WebGIS" ... the machine on which you're running Portal, the hosting Server, and the hosting Server's managed geodatabase (presumably the PostGRE RDBMS provided by ArcGIS Data Store). Then, on the machine that is providing your "WebGIS", from a browser (I do this from witin Internet Explorer) you'll want to export a *.cer certificate. You'll then want to import that certificate into Server on machine you have set-up for "RealTime" event processing. Typically this second server has only ArcGIS Server and GeoEvent installed. You could choose to federate this second server with Portal - but you do not have to. The reason, I've been told, that you want to export a *.cer from a browser and not from IIS is that a certificate generated by IIS will have the "WebGIS" server's private key ... which you do not want to share with other server mahcines. The browser generated certificate does not include the "WebGIS" server's private key, but will still allow GeoEvent (which will trust, by default, anything that the Server installation it is running under trusts) trust with Portal running on the other server machine. This will probably be more clearly presented in a tutorial introducing the spatiotemporal big data store we are working to put up on the GeoEvent Gallery ASAP. The tutorial will not cover product installation and set-up of your WebGIS but will include some discussion on SSL certificates and the trust required between machines when configuring a server for your "WebGIS", a separate server for "RealTime", and a third server for hosting the BDS. - RJ
... View more
03-18-2016
11:04 AM
|
0
|
2
|
7014
|
|
POST
|
Hey Marc - Did you try stopping the 'ArcGIS Data Store' service running on the, I'm assuming, Windows machine on which you installed and then enabled the spatiotemporal big data store (vb2stds.c2.test.local)? In an internal staff training today, a couple of folks were seeing an error logged in GeoEvent ("com.esri.ges.datastore.bds.internal.BDSClientImpl / None of the configured ArcGIS Spatiotemporal Big Data Store nodes are available") when trying to create a new output to add features to their BDS. Restarting the ArcGIS Data Store service fixed their issue. If you try to browse to http:// vb2stds.c2.test.local:9220 does Elasicsearch respond by asking you to authenticate (provide a username and password) to log-in? You don't want to connect to Elasticsearch directly over port 9220, but trying to do so might tell you wether or not the service is responding to requests. Were you able to register and validate a "Portal" type of server connection with GeoEvent as a Data Store? If GeoEvent does not have a registered server with a recognized BDS the 'ArcGIS Server Connection' dropdown will be empty when trying to configure a GeoEvent output to either add or update features in the spatiotemporal big data store. Just a few ideas - RJ
... View more
03-04-2016
05:56 PM
|
2
|
1
|
7014
|
|
POST
|
This capability was added in the 10.4 release. Please refer to the following thread: Formatting email notifications in GeoEvent Processor - RJ
... View more
02-13-2016
09:27 AM
|
2
|
0
|
1236
|
|
BLOG
|
Another potential scenario … Let’s say that you did make a copy of a GeoEvent Definition in order to rename some … but forgot to add a field named “Geometry” to the event definition you copied and own. You might assume that the input will create the needed “Geometry” field for you … but it doesn’t. You again look in the logs and see error messages to the effect “Cannot find matching GeoEvent Definition. Event is not created.” When you look back at your input’s configuration you discover that you specified ‘No’, the input should not ‘Create Fixed GeoEvent Definitions’. In this case the input is assuming that it does not have permission to alter a GeoEvent Definition you created and specified the input should use. The truth is that if you were to specify ‘Yes’ the input should ‘Create Fixed GeoEvent Definitions’, but then key in the name of a GeoEvent Definition you own … the input would assume that it had permission to alter the definition you created. There is a bug open against the 10.4 release that components should not alter GeoEvent Definitions they do not own. The input should be checking to discover that you own the GeoEvent Definition, not the com.esri.ges.adapter.inbound.Text adapter, and conclude that it does not have permission to alter the event definition. The point is that you should pay particular attention to your input’s configuration and the GeoEvent Definition the input is using. Don’t enter the name of an existing GeoEvent Definition if you configure an input (or other component) to create a GeoEvent Definition for you.
... View more
02-05-2016
06:51 PM
|
0
|
0
|
1765
|
|
BLOG
|
There’s always more to the story however … Notice above that I said “you were careful to copy and edit the GeoEvent Definition, back in 10.3.1 …” Many users do not make a copy of a generated GeoEvent Definition before making edits – they edit the copy technically owned by a GeoEvent component (the input connector in this case). It’s always recommended that you leave a generated event definitions alone. If you need to make edits, copy the event definition and make the edits to a copy you own. Let’s say that you had edited the generated event definition, exported your entire 10.3.1 product configuration, and then choose ‘Selective Import’ rather than ‘Export Configuration’ to import just your GeoEvent Service from your GeoEvent product configuration XML into your 10.4 installation. You might notice that your input, output, and GeoEvent Service were imported, but not the GeoEvent Definition you tailored. That is because the input, configured to create a GeoEvent Definition from data it receives, assumes that the previously generated event definition might be stale and it should go ahead and allow the 10.4 adapter to create a new one. Not realizing that the event definition you tailored back in 10.3.1 did not import, you begin simulating data and see event output which does not have a Geometry (notice the trailing comma with no Geometry following the coordinate values): In this case, the GeoEvent 10.4 input discovered that it needed to generate a GeoEvent Definition, so it did, and it included the needed field named “Geometry”. But the input was configured to look for values in fields named “Longitude” and “Latitude” when creating a Geometry … and the newly generated event definition only has ‘Field1’, ‘Field2’, ‘Field3’ (etc.)
... View more
02-05-2016
06:51 PM
|
0
|
0
|
1765
|
|
BLOG
|
Changes made to the Text adaptor for the 10.4 product release might catch a few folks off guard, so I want to call attention to what you might expect to see and why. Several inbound connectors – specifically those using the Generic-JSON and XML adaptors – provide the ability to ‘Construct Geometry From Fields’ so that when event data is received which contains coordinate information on a point location a Geometry can be constructed by the GeoEvent input prior to sending the event to a GeoEvent Service. At the 10.3.1 release, inputs such as ‘Receive Text from a TCP Socket’ and ‘Watch a Folder for New CSV Files‘ do not have this capability because it was not included in the Text adapter. It was observed that if a user allowed the input to create a GeoEvent Definition and then later reconfigured the input to request that it construct a Geometry from specified event fields without also editing the event definition to include a Geometry field in which the constructed Geometry could be placed … that the input would stop ingesting event data. For the 10.4 release, an enhancement was made to the Text adaptor to bring it in line with the Generic-JSON and XML adaptors: Issue #945: Text adapter needs to follow Generic-JSON adapter's behavior and create a field of type Geometry, tagged GEOMETRY, when creating a GeoEvent Definition Now, at the 10.4 release, when you select the ‘Construct Geometry From Fields’ option and specify the name of event attribute fields containing coordinate values, the GeoEvent Definition generated for you by the input will include a field named “Geometry”. The field will be added as the last field in the event definition and will be tagged with the GEOMETRY GeoTag. If you leave the ‘Construct Geometry From Fields’ parameter set to its default ‘No’ the generated event definition will not have the Geometry field highlighted above. If you elect to edit the generated GeoEvent Definition to replace ‘Field1’, ‘Field2’, ‘Field3’ (etc.) with meaningful names, but neglect to include a field in the GeoEvent Definition into which the constructed Geometry can be placed, and then alter your input to switch ‘Construct Geometry From Fields’ from ‘No’ to ‘Yes’ … beginning with the 10.4 release the input will alter the event definition for you to create the needed Geometry field. Here’s where this enhancement might produce undesired behavior … Let’s say that you had been using GeoEvent at the 10.3.1 release with a ‘Receive Text from a TCP Socket’ input successfully receiving event data sent from the GeoEvent Simulator. Your GeoEvent Definition might look something like the following: You export your 10.3.1 GeoEvent product configuration as an XML file, upgrade to 10.4, and import your configuration. When you try simulating the same data which was working at the 10.3.1 release, the input’s event count no longer increments and it does not appear that your GeoEvent is receiving any of the data you’re simulating. You look in the GeoEvent logs and see a message: Cannot find matching GeoEvent Definition. Event is not created. The incoming text is SWA2706,3/16/2012 02:25:30 PM,IAD,TPA,B733,37000,-79.585739,34.265521 What’s going on? It is likely that the field named “Location” is not the field the ‘Construct Geometry From Fields’ operation expects. Even though you were careful to copy and edit the GeoEvent Definition, back in 10.3.1, to include a field whose data type is Geometry and tag the field GEOMETRY … its name is not “Geometry”, so the input doesn’t recognize it. Remember that delimited text is not well-defined like JSON or XML. If the inbound events contained field names then the adapter would be able to map the received data into the correct fields in the event definition. The 10.4 Text adapter does not assume that a field of type Geometry is sufficient (even the field is tagged GEOMETRY). It looks for a field named “Geometry” and, failing to find one, it logs the error shown above and discards the event. To fix the problem, all you have to do is edit the GeoEvent Definition imported with your configuration and rename the last field from “Location” to “Geometry”. This is probably a scenario that many users will encounter when upgrading 10.3.1 configurations which include a TCP/Text input to the 10.4 release. You need to remember that at 10.4 your Geometry fields should be named “Geometry” (not “Location”, or “Target”, or “Geom”). The field must still be the last field in the GeoEvent Definition. Hope this information saves you a little future grief - RJ
... View more
02-05-2016
06:50 PM
|
1
|
8
|
5407
|
|
BLOG
|
Technical Support is available on this topic. Please contact Esri Technical Support and mention Article ID 000011685 and Article ID 000011689 See also: Geoevent WebSockets in 10.6 with ARR and Windows/IIS Reverse Proxy for GeoEvent WebSocket I received a second request recently for the information below, provided to me originally by Javier on the GeoEvent Server development team, so I thought I’d post it in case others are looking for the information. After installing ARR, double-click the URL Rewrite icon and create a similar rule (replacing the hostname of the Rewrite URL to match your environment): After applying the rule confirm you are able to access GeoEvent Manager through IIS: Configuring your SSL certificates will be important. You can use IIS to create and export a Domain Certificate with a private key and then configure ArcGIS Server and GeoEvent to use that certificate. An alternative would be to get IIS to trust the certificate that is configured with your ArcGIS Server/GeoEvent installation. It was discovered that, using the 10.3.1 release of GeoEvent Server and IIS version 8.5 with WebSockets enabled, with ARR configured to create a reverse proxy for GeoEvent that StreamService connections did not work. This issue was addressed in the 10.4 release of GeoEvent Server. 10.3.1 deployments can create a reverse proxy similar to WebAdaptor specifically for WebSockets using NGINX. Steps outlined below provide some detail on installing and configuring NGINX. A sample nginx.conf configuration is attached which you can use as a reference. Please note: Esri tech support cannot help troubleshoot reverse proxy configurations - whether they be NGINX, IIS, or Apache. If you do plan on deploying a reverse proxy as part of a systems solution, make sure you have someone with appropriate experience available to you for help troubleshooting. Esri tech support has a KB article you can refer to: http://support.esri.com/cn/knowledgebase/techarticles/detail/40680 Install a WebSocket reverse proxy server Nginx. Enable HTTPS on the proxy server and configure it to use a certificate issued by a trusted 3rd party CA (Thawte, VeriSign, DigiCert). Configure the proxy server to forward requests to GeoEvent Services. Attached is an example of an Nginx configuration file. You will need to change the following settings: server_name <your Web Socket reverse proxy server name> ssl_certificate <your CA-cert certificate file> ssl_certificate_key <your CA-cert certificate key file> server <list of servers that GeoEvent Extension is running on>. In this example, the server names are dev01014.esri.com, dev01015.esri.com, and dev01018.esri.com Note: The WebSocket reverse proxy server is set to use HTTPS, but it connects to HTTP on the backend. In the example configuration file, the proxy_pass for port 443 is set to http: //skivmHTTP; not https: //skivmHTTP. In a web browser, navigate to http: //<ServerName>:6080/arcgis/admin to access the ArcGIS Server Administrator Directory. Login and click system -> properties-> update. Enter a property called WebSocketContextURL to point to the Web Socket reverse proxy. For example: {"WebSocketContextURL": "wss://skivm.esri.com"} In a browser, navigate to: https: //<WAMachineName>/<context>/rest/services/<StreamServiceName>/Streamserver/subscribe Click Subscribe to verify data is streaming. You can also verify data is streaming by navigating to: https: //<WAMachineName>/<context>/rest/services/<StreamServicename>/StreamServer?f=jsapi See Also: https://nginx.com/resources/wiki http://nginx.com/resources/admin-guide/reverse-proxy http://www.iis.net/downloads/microsoft/application-request-routing http://www.iis.net/learn/extensions/configuring-application-request-routing-(arr) Hope this information is helpful - RJ
... View more
02-05-2016
02:37 PM
|
4
|
4
|
20308
|
| 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
|