|
POST
|
Hello Alexander -- I checked with Morakot, the developer who created the Motion Calculator processor. He indicated that what you describe sounds like a bug. We are working to create a public repository for this processor on GitHub. If you have development experience and want to review the processor's implementation, you will be able to shortly. In the meantime, if this is still an issue for you, would you please open a case with Esri Support so that we have something to work against? You can ask that the case be elevated to jjoyner@esri.com in support; he has worked with the Motion Calculator recently. You can also follow-up with Morakot Pilouk on the GeoEvent product team. Apologies for the delay in getting back with you on this issue - RJ The repository is now available on GitHub: https://github.com/Esri/motion-calculator-for-geoevent
... View more
01-28-2016
04:48 PM
|
0
|
0
|
815
|
|
BLOG
|
Hey K - What I think you're asking for is a ODBC / JDBC connector capable of retrieving data directly from an RDBMS table. No, there are no plans to offer such a connector. Connectors such as these would be database specific and we are working to keep GeoEvent database agnostic. The GeoEvent existing inbound connector which polls an Esri feature/map service to retrieve data from a feature layer uses the feature service as an interface to the database. There are a couple of alternatives described in the threads cross-linked below. - RJ See Also: Direct connection to RDBMS GeoEvent process Oracle/SQL connector
... View more
01-25-2016
06:18 PM
|
1
|
0
|
4053
|
|
POST
|
Hello Jan - No, your options for changing the symbology for a stream layer in a web map to render the data being broadcast from a stream service are limited. You cannot use attributes to drive unique value rendering. Pretty much you are limited to a single symbol, although that symbol does not need to be a simple marker symbol, it can be an image (PNG, GIF, or JPEG). - RJ See Also: How create symbology on stream layer
... View more
01-22-2016
06:25 PM
|
1
|
0
|
873
|
|
POST
|
Hello Ben - My apologies that your question went so long without an answer or reply. To the best of my knowledge, GeoEvent does not do anything with Shapefiles, and there is no out-of-the-box processor which will query a map service / feature service based on spatial criteria. The Field Enricher processor is the closest match, and as you know, it only accepts a field on which an attribute join can be performed. Therefore the only workflow available, out-of-the-box, for enriching an event with attribute information from a database table based on spatial coincidence with a Geometry is the one you've used: Load GeoFences, use a GeoTagger processor to determine spatial coincidence (and enrich with the name of a GeoFence), then use a Field Enricher processor to complete the enrichment by performing an attribute join and loading attribute values associated with the GeoFence into the event being processed. The product team has an issue open in the product backlog ("Allow imported GeoFences to contain both attributes and geometry - Issue #564"). Implementation on this has been deferred because GeoFences, by design, are intentionally light-weight. They are maintained in memory for fast geometric comparisons. There are significant consequences to loading all of the attributes associated with a Geometry into GeoEvent as GeoFence attributes. I will ask around to see if there is any other advice to offer you, but I think in this case the workflow is by design. A custom processor which provides an event's Geometry to a feature service in order to perform a spatial join is not something I think is being considered. Esri Technical Support can help you open a case to request product enhancements. If we can get several customers behind a case it will help prioritize the enhancement within the product backlog. Hope this information is helpful - RJ
... View more
01-22-2016
04:28 PM
|
0
|
3
|
1786
|
|
POST
|
Hello Steven - My apologies that your question went so long without an answer or reply. I don't have a Sierra Wireless setup I can use to truly replicate your workflow, but I can assume a data provider is sending invalid date/time values and choose another way of ingesting the data. I configured a 'Receive JSON on a REST Endpoint' and sent the following three records into a GeoEvent Service [ {"TrackID":"AA-1234", "DT":"11/30/1999 12:34:56"}, {"TrackID":"BB-3456", "DT":"01/22/2016 12:34:56"}, {"TrackID":"CC-5678", "DT":"11/30/2099 12:34:56"} ] The date/time values are received as string values, but I made sure my GeoEvent Definition specifies that the attribute values be handled as Date. I used a stream stream service to broadcast the unfiltered output so that I could see the epoch milliseconds value GeoEvent was handling: {"attributes":{"TrackID":"CC-5678","DT":4099754096000}} {"attributes":{"TrackID":"AA-1234","DT":943994096000}} {"attributes":{"TrackID":"BB-3456","DT":1453494896000}} I've been told that attempting to configure a Filter with any of the following expressions will not work: DT >= ${EffectiveFrom} Comparing an event attribute against another field of type Date DT >= 2/15/2015 13:26:45 Comparing an event attribute against a String literal TIME_START <= ${MyEventTime} Using a GeoTag to identify a field to compare against another field But using the date/time algebra you tried (e.g. TimeStamp >= 2015y 11M 19d) should have worked. I tested the following expression in a simple Filter element: DT >= 2010y 01M 01d That expression successfully filtered/removed the invalid '1999' value. When I changed my filter to have two expressions (with a logical AND): DT >= 2010y 01M 01d AND DT <= 2030y 01M 01d both invalid dates were filter/removed. Only the event with the TrackID "BB-3456" passed through to my stream service output. You may want to check your GeoEvent Definition to make sure that your TimeStamp field is being handled as a Date. You could also use a File/JSON output or a stream service output to confirm the date/time value associated with the events you are receiving. I confirmed that a Filter element's expression will not accept a literal integer value representing epoch milliseconds. A Field Calculator processor performs implicit data type conversions as part of its expression evaluation (which is why we can add/subtract some number of milliseconds from a Date value) ... but a Filter is limited to the date/time algebra I used above. The product team has an issue open in the product backlog ("The date format does not work on filter in GeoEvent Services - Issue #581"). If applying filters to date/time values continues to be an issue for you and the date/time algebra is not a workable solution, please submit an incident with Esri Technical Support and request the incident be escalated and linked to the existing issue in the product team's backlog. Hope this information was helpful - RJ See Also: How to Create Temporal Filter in GeoEvent
... View more
01-22-2016
03:41 PM
|
0
|
0
|
902
|
|
POST
|
Cross Reference: ArcGIS GeoEvent Twitter Module: How to get USA-Only Tweets?
... View more
01-22-2016
02:21 PM
|
2
|
0
|
609
|
|
POST
|
Satyanarayana - Your question is not specific to the GeoEvent Extension for Server. You might have more luck posting to one of the forums beneath All Places > GIS > Applications such as: Collector for ArcGIS or Web AppBuilder for ArcGIS Best Regards - RJ
... View more
01-21-2016
08:33 PM
|
1
|
0
|
536
|
|
POST
|
Hello Daniel - My apologies that this reply is coming so long after you posted your question. In case you are still facing a workflow in which a GeoTagger processor (out-of-the-box) is producing a list of GeoFences which satisfy the spatial criteria (e.g. GeoEvent Geometry INTERSECTS .*/.*) when GeoFence areas overlap, please take a look at the custom processor below which has been uploaded to the product gallery: Field Splitter Processors for GeoEvent This custom processor is intended to be placed in-line with a GeoTagger, immediately following the GeoTagger, to split a single GeoEvent whose GeoTags attribute field contains a list of values into multiple events. This should eliminate the need to incorporate multiple Field Calculator processors in your GeoEvent Service to manually pull the names of GeoFences out of the list by hard-coded index. Please let us know how this custom processor works for you. Best Regards - RJ
... View more
01-21-2016
06:36 PM
|
3
|
0
|
2026
|
|
POST
|
Hello Richardson – The ‘Send a Text Message’ output is really just a special case of the ‘Send an Email’. GeoEvent relies on SMTP for both e-mail and SMS. It does not support the SMPP protocol. When you specify the ‘Carrier’ and ‘Recipients’ (which is just a numeric phone number) you’re allowing GeoEvent to construct an e-mail address for the recipient. So you provide: Carrier: AT&T Recipients: 9095551234 And GeoEvent constructs 9095551234@txt.att.net for you and sends the SMS text to that e-mail address via the SMTP server you specified. So you could use the ‘Send an Email’ output instead and just enter in the known SMS / SMTP address for the recipient. The Carrier / Gateway values are configurable, by the way, from Site > Settings as illustrated above. Sorry for the delay in response. Hope this information is helpful. - RJ
... View more
01-21-2016
05:37 PM
|
0
|
0
|
1772
|
|
POST
|
Hello Jerry - Yes, there is a RabbitMQ management console you can access to check the internal queues, but we normally don't advertise how. The administrative endpoints are undocumented because our dependency on the RabbitMQ platform service is considered an implementation detail. The GeoEvent product team could change this at any release, although it did not change for 10.4 and is looking (for now) like it won't be changing for the 10.4.1 release. I've been told that enabling the plug-in increases the overall memory footprint of the product, so you should probably only leave it enabled when you plan on actually using it, disabling it on a production system. Finally, you can really muck things up from within the management console, so if you do enable it, be careful not to make any changes to the exchanges or message queue bindings. Here's how to enable and access the management console: If RabbitMQ is running, you must first stop it Log-out of GeoEvent Manager and stop the GeoEvent Windows Service Log-in to the ArcGIS Server Administrator Directory: https://<server>:6443/arcgis/admin/login Navigate to the platform services endpoint: http://<server>:6080/arcgis/admin/system/platformservices?f=json This is an undocumented REST endpoint within the Server Admin API Note the <id>, <user> and <password> for the RabbitMQ Message Bus displayed on the platform services page Navigate to the following endpoint to stop the RabbitMQ platform service http://<server>:6080/arcgis/admin/system/platformservices/<id>/stop?f=json You can replace ‘stop’ in the URL above with either ‘status’ or ‘start’ to start, stop, and status the service In a Windows File browser, open the folder C:\Users\…\AppData\Roaming\RabbitMQ on the server machine for the user account used to run the ArcGIS Server and GeoEvent Windows Services. Create a file named: enabled_plugins The filename has no extensions (make sure Windows isn’t hiding a .txt extension from you) Edit the file to contain a single line of text: [rabbitmq_management]. Note that the ‘.’ Is part of the line of text you enter into the file Use the ArcGIS Server administrative endpoint to start the RabbitMQ platform service http://<server>:6080/arcgis/admin/system/platformservices/<id>/start?f=json Refer to: http://mediawiki/index.php/RabbitMQ_Integration#Enable_RabbitMQ_Management_plugin Restart your GeoEvent Windows Service You do not need to be logged-in to GeoEvent Manager, but GeoEvent needs to be running Browse to the following URL to log-in to the RabbitMQ management console (using <user> and <password> noted above) https://<server>:27274 From here you should be able to click on ‘Exchanges’ to review the exchanges managing communication for the GeoEvent ‘default’ cluster. You should see several exchanges which identify GeoEvent (e.g. geoevent.<cluster>.<type>:<guid> is how they appear in the 10.4 release). If you log-in to the GeoEvent administrative API (https://<server>:6143/geoevent/admin) you can click to list the inputs you have running, for example, and look at the GUID assigned as the Name for an input. Back in the RabbitMQ management console you can click on ‘Queues’ and identify the queue associated with a particular GeoEvent input. Good luck, and hope this information is helpful - RJ
... View more
01-21-2016
05:24 PM
|
2
|
0
|
4077
|
|
POST
|
Hello Guillaume - I don't think you will be able to use GeoEvent, out-of-the-box, to do what you are trying to do. While the SOAP protocol does use XML to structure its requests and responses, SOAP messages are not the type of event structure GeoEvent is expecting when XML is used to format event data provided by a real-time data stream. You might configure a 'Poll an External Website for XML' to poll a SOAP service, but the GeoEvent's input will only make a single attempt to parse the response it receives. When a GeoEvent input polls an external server, it expects a single response to its request, consistent with the architectural style of REST. The data structure, or byte payload, sent to GeoEvent in response to its request is parsed by the input's adapter (a transport is responsible only for delivering the byte payload to the adapter). The adapter expects a specific format (JSON, XML, Delimited Text) and uses a GeoEvent Definition to take attribute values from the response and construct a GeoEvent object. There is no provision in the event ingest workflow described above to perform multiple actions or operations with a data provider's service. Integrating a SOAP toolkit into your solution to handle the token acquisition and data request is one approach. You also might be able to use the GeoEvent SDK to implement a custom transport which will handle the token acquisition, data request, and session closure. This might be preferable if the SOAP toolkit uses Java. If you plan on using an external batch script to handle the service request and write the data to a system file for GeoEvent to then ingest, please be aware that there are several problems inherent when working with file-based input. One example is that GeoEvent may attempt to acquire a handle to a file (and begin reading the file) before the external process is finished writing the file to disk. Another example is related to the issue above; GeoEvent needs to read the contents of a file into memory in “chunks” and may encounter a problem emulating a data stream when retrieving blocks of event data from a system file. Inputs which watch a system folder for files are generally intended to prove that event filtering and real-time analytics you have designed into a GeoEvent Service behave as intended. Files give you the ability to repeatedly send a small sample of event data to GeoEvent to test the behavior of a GeoEvent Service before transitioning to a production configuration in which real-time data feeds arrive via a stream - such as an HTTP/POST from an external server or as a reply to a query made on an external server's URL. Sorry this reply is coming to you so late. Hope that it is of some help. - RJ
... View more
01-21-2016
02:09 PM
|
2
|
0
|
1962
|
|
POST
|
Hello Britt - I downloaded the sample file.xml you attached. I had to remove some literal dash characters ('-') from several lines before an XML editor I normally use would validate and display the file's content for me to review. My first question is if I can extract all the location information defined at the lowest hierarchical position along with high level details from the top level xml hierarchical nodes ... Let me make sure I understand what you want to do. Given a structure like the one illustrated below, you want to bring each <Issue> element in from the <Issues> list as separate events, but you want the events to incorporate the information from the <LocalTime> and/or the <UtcTime> elements found outside the <Issues> structure. The quick answer is no, you cannot do this. When specifying the 'XML Object Name' parameter for either the 'Poll an External Website for XML' or 'Receive XML on a REST Endpoint' GeoEvent inputs, you are telling GeoEvent that it should scan forward (through the XML structure), skipping past elements and attributes until it locates the specified 'XML Object Name' node. GeoEvent will then bring in elements listed beneath that root node as separate events. The trade-off to identifying a list deep within a structure and having GeoEvent parse that list is that you have told GeoEvent to skip past and disregard elements outside of the list. You might want to take a look at the discussion thread XML can I use this source? The problem presented in that thread is similar - the date on which each event occurred is outside of the list of events Since each record in the list only specifies a time, you need a way to enrich each of the individual events with the date recorded as an attribute in the list's root node. In your case your challenge is compounded as it looks like each <Issue> can have more than one <Location>. ... I selected 'Location' as my 'XML Object Name'. Can we somehow extract all the location objects with all the elements and attribute information from this xml? Looking at the XML structure, <Issues> appears to be a list. I would expect I could use GeoEvent to parse the <Issues> structure in order to bring each <Issue> in as a discrete event. Because the various <Location> records are not organized beneath a single root node (e.g. thay are children associated with a particular issue) I don't think the data structure will support GeoEvent bringing each <Location> in as a separate event. The idea behind the 'XML Object Name' parameter is that you can specify a single node as a "root" node and have GeoEvent only bring in data found beneath that "root" node as discrete (separate) events. Hope this information is helpful - RJ
... View more
01-21-2016
01:28 PM
|
0
|
0
|
648
|
|
POST
|
Greg Carr-Hyde - Here are a couple of links to other discussion threads which provide some background on SOAP. The SOAP protocol does use XML to structure its requests and responses, but SOAP messages are not the type of event structure GeoEvent is expecting when XML is used to format event data provided by a real-time data stream. Is it possible to send a SOAP request with GeoEvent? SOAP Input The sample XML Dominik Schlarmann provides at the top of this thread is a much better example of an XML event structure. GeoEvent can work to translate this XML into a JSON format (an implementation detail handled for you by the XML adapter) in order to ingest the event data stream. I mention this because JSON does not support the concepts of elements and attributes that XML supports This can present you with challenges when bringing in complex XML data structures. Generally speaking, if you must use XML, I would avoid XML which includes attributes. Stick to using elements and the XML-to-JSON translation will work better. Sorry this response is coming so late. Hope the information is helpful. - RJ See Also: W3 Schools - XML Elements vs. Attributes
... View more
01-21-2016
12:34 PM
|
0
|
0
|
3373
|
|
POST
|
Dominik Schlarmann - Glad to see you were able to identify the issue. My apologies for the frustration and time you had to spend to figure it out. Thanks for posting your workflow steps. They are spot on for what you need to do in order to bring the 'x' and 'y' attribute values in as Double values and have the GeoEvent input use the coordinate values to construct a true Geometry. It is not at all obvious, but a Geometry is not a simple Group structure, as you discovered. Sometimes when GeoEvent examines a data structure in order to makes its best guess at how a GeoEvent Definition ought to be created, a group with coordinate values which looks enough like a Geometry ends up being represented as a Geometry in the generated event definition, forcing you to go back and correct the generated event definition to handle the nested coordinate values as sub-elements within a group. Here's a couple of examples of what different Geometries look like in a JSON format. Notice that the polygon's coordinates are organized as nested lists with a keyword "rings". The above is why the GeoEvent inputs which allow you to construct Geometry from attributes only support the creation of Point Geometry. You can find additional detail on working with Geometries in GeoEvent in 'Appendix A' of the GeoEvent Extension Introduction tutorial. Look for the section titled "Using a Field Calculator Processor to compute a geometry".
... View more
01-21-2016
12:11 PM
|
0
|
0
|
3373
|
|
POST
|
Hello Meengia - Glad to see you were able to come up with a solution that worked for you. I have had issues when trying to specify coordinates for a bounding box when configuring a 'Receive Tweets' input connector's 'Locations' parameter. Part of this was my confusion - I had thought that specifying a bounding box and hash-tags I wanted to follow would produce an intersection. According to the Twitter Developer website documentation, when you specify both tags you want to follow and a bounding box you get a sample of the tweets located in the bounding box or which have the specified hashtag. When I configured my 'Receive Tweets' input with only a bounding box, specifying ‘-118.25,34.0,-87.75,49.0’ for the ‘Locations’ parameter, I still did not get exactly what I expected. Twitter's API accepted the settings and generally filtered Tweets down to my specified area-of-interest, denoted below by the dotted rectangular box over a portion of the U.S. However, as you can see, the data stream received by GeoEvent included many dozens (hundreds) of events whose location was outside of the specified extent – some quite a bit outside. For this reason, if your goal is to stream content from the Twitter API and display only Tweets within a defined area of interest, I’d recommend first configuring your inbound connector to follow hashtags of particular interest, then incorporate a filter element within a GeoEvent Service to further filter the received event stream to only those events whose GEOMETRY actually INTERSECTS (or is WITHIN) a GeoFence. You would have to import a polygon from a map service or feature service to define your area of interest if you wanted to follow this approach. Hope this information helps - RJ
... View more
01-21-2016
10:43 AM
|
2
|
0
|
1301
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 01-05-2023 11:37 AM | |
| 1 | 02-20-2025 03:50 PM | |
| 1 | 08-31-2015 07:23 PM | |
| 1 | 05-01-2024 06:16 PM | |
| 1 | 01-05-2024 02:25 PM |
| Online Status |
Offline
|
| Date Last Visited |
Thursday
|