Here Fleet Telematics admin area - here-api

I am using fleet telematics and accessing tile for kuwait. If a place is present into two tiles I combine combine all coordinates from all rows for that place and convert that coordinates into polygon.
Please see the image below as i see weird polygons.

To get the city bounds of Kuwait city admin area, you may want to use ADMIN_POLY_8.
If you query that layer, you will notice that the ADMIN_LEVEL attribute here is '4' which corresponds to city.
To understand which layer to pick, check the description of the layer on sending this call
https://s.fleet.ls.hereapi.com/1/doc/layer.json?layer=ADMIN_POLY_8&apiKey={{RESTapiKey}}
In the response, you will see the attribute 'ADMIN_LEVEL' which says 'Administrative level 1 - 9.To look up the country specific name/meaning, applications can load the static table {COUNTRY} and fetch the value from column'
When you query the static layer 'COUNTRY' , you will see that 'ADMIN_LEVEL_DESCRIPTION_4' corresponds to city.
This is how you can find out which layer to choose.
you have selected ADMIN_POLY_9 which has places with ADMIN_LEVEL 5.
This gives you the geometric bounds of SETTLEMENT within the city and thus the multiple polygons.

Related

Select an object from a collection in anylogic?

I need to simulate an earthquake on my GIS map. I've created some regions on my GIS map and I've created a collection in which put these regions. Now, I need to create a function which choose one of these regions (which may a probability for each one) and in this choosen region model have to locate eartquake epicenter (I created an agent called earthquake).
1- How can I type this code in my body function?
2- Which type of collection do I need to choose (e.g. "Linked List", "Tree map". etc.) ?
3- How can I create after this, earthquake latitude and longitude (I need to send Tir agent on epicenter) ?
I upload below pics to make understandable.
enter image description here
enter image description here
Spontaneous idea:
I would work with an array list, each line is a region as a string.
Then use another variable to find out which region you need (e.g. use a normal distribution, if the value is above a threshold it is region B, otherwise it is A).
As region A and B are in different lines of the collection, your i for the following code changes: collection.get(i);.

Anylogic - placing resources on GIS map

I have a GIS map on main and I have a population of Suppliers on main. Each Supplier has it's own fleet of delivery vehicles which are modelled as a ResourcePool of type DeliveryTruck inside the Supplier agent. I am able to place the Suppliers on the GIS map at the correct locations as defined by longitude and latitude.
In the Properties of the DeliveryTruck ResourcePool I call unit.setLocation(this) in the "On new unit" action however when I query the location of the DeliveryTrucks (getLongitude(), getLatitude()) the DeliveryTrucks are at 0,0 rather than the long/lat of the Supplier they belong to.
Even after I move the trucks to a location on the GIS map using moveTo(longitude, latitude) and query the trucks location on arrival, it still returns 0,0.
I'm guessing it has something to do with making sure the trucks are in the GISMap environment on main but as the ResourcePool for the DeliveryTrucks is within the Supplier it is not obvious how I get them into the GIS map on main.
Any ideas?

Filter Google Places API results based on City

For one of my applications, I will let the users choose a City and then an Area. What I want to achieve is that based on the user's city selection, the Area field(which is using the autocomplete from Google Places) to display areas from that City. Eg: If user chooses the city as New York, the Area field should autocomplete only the areas from New York. Is this something which can be achieved?
1] In autocomplete API, pass the "Lat,Long" in "location" parameter and "100000" in "radius" parameter. It will bias search result within 100Km in that city.
Eg: Pass "40.7128,74.0059" for NewYork and it will give you result within 100Km in NewYork city.
OR
2] There is a trick you can use.If a user chooses a city, just add the city name as a prefix in the search string. It will only give the search suggestions in which the user is searching. eg, pass "NewYork" as a prefix in your search string, now type any word, it will only give you results for NewYork city restaurant, cafes, places, etc
You can do it by restricting the results of your autocomplete by a specified area.
Here are the ways that you can use:
Location Biasing - you may bias the results to a specified circle by passing a location and a radius parameter. This instructs the Place Autocomplete service to prefer showing results within that circle. Results outside of the defined area may still be displayed. You can use the components parameter to filter results to show only those places within a specified country.
Location Restrict - it can restrict the results to the region defined by location and a radius parameter, by adding the strictbounds parameter. This instructs the Place Autocomplete service to return only results within that region.
Places Types - you can restrict results from a Place Autocomplete request to be of a certain type by passing a types parameter. The parameter specifies a type or a type collection, as listed in the supported types below. If nothing is specified, all types are returned.
Hope this information helps you.

How would you find the most specific "filter" that matches a document? (determining which market segment a user fits in)

Imagine you have actions setup for when a user is from a certain demographic/market segment. The filters work a bit like a graph, matching for country, region, platform, operating system, and browser.
By default, you will match any value (if you specify US, you match for all users from the US regardless of region, platform, OS, or browser)
If you specify multiple values for any property of the filter it works like an OR (can be any of the values you specified), for the filter to match all the properties must have at least one match or be empty (accept all), essentially an AND operation.
So we can have:
Segment #1:
Countries: United States, Canada
Segment #2:
Countries: United States
Regions: New York
Platform: Tablets
Segment #3
Countries: United States
Browser: Chrome
Segment #4
Countries: United States
Segment #5
Match all (all filters left empty)
Scenario #1
User from Canada on his Tablet
Result: Segment #1
Scenario #2
User from New York, United States visits from Google Chrome on his Tablet.
Result: Segment #2, because the filter more specifically matches the user (matches country, region, and platform)
Scenario #3
User from Texas visits from his desktop
Result: Segment #4, tie with segment #1 is resolved because Segment #4 only matches United States and is therefore more specific
Work so far
I was thinking I could take each segment and load it up into a graph database that looks something like this
Country -> Region -> Platform --> OS -> Browser -> Segment
Each node either has a value (ex: United States, Chrome, Firefox, etc) and relationships that link it to any node below it in the tree (Country -> Browser is okay, Browser -> Country is not) or is null ("match all").
Each relationship (represented by ->) would also store a weight used to resolve ties. Relationships from a catch-all node get the max weight as they will always lose to a more specific filter.
Example database (numbers on the lines are the weight, lower weight becomes the prefered path)
Potential query
So now I need a query (maybe neo4j can do this?) that does the following:
Find the top level country node with the same value as the user or null
Go through each relationship (sorted by weight in ascending order)
Find the longest path, ties go to the node connected by a relationship with the lowest weight (if the tie is between a relationship to a null/catch-all node, the null node loses)
Continue this loop until we find a segment #
I'm sorry for the long post, it's hard to explain what I'm getting at via text.
What I'm looking for
Am I on the right path to solving this problem?
Are there better ways to go about this?
What would be the best way to store these relationships (graph database?)
How can I build a query that does what I want?
tl;dr: Need a way decent/performant way of finding the longest/most specific path in a graph like data structure. Comments requesting clarification or with any related information/documentation/projects/reading are very welcome
With Neo4j, you can store properties in a relationship, example:
(u1:User{name:"foo"})-[:FRIEND_WITH{since : "2015/01/01"}]->(u2:User{name:"bar"})
I think you should store country nodes this way:
(usa:Country{name: "USA", other attributes...})
So you can find every single country by matching with Country label, and then filter with the name property to get the one you're looking for.
Same for the cities, you can do a simple relationship to store every city :
(usa:Country{ name: "USA"})-[:CONTAINS_CITY]->(n:City{name: "New York", other attributes...})
and then you can add platform etc after the city.
To match a segment related to a certain country, you can do this way (example for Scenario #1) :
Match (c:Country{name : "Canada"})-[*1..2]->(p:Platform{name : "Tablet"})-[*1..]->(s:Segment) return s
Then you can create your segment by using nodes and create relations between them, the only problem may be on this case:
User1 has a Tablet in Canada
User2 has a Tablet in Canada using
Chrome
In this case, because of the depth match on the relationship ([*1..]) the User1 can be on the same segment as User2. The solution is to create intermediate nodes with default values, in case you don't have browser informations for example.

Google map api v3 markers exclude a city or certain bound

I am using google maps api v3. I have a database of markers with lat and long address that I display on a map and that works fine.
The map is displaying markers for entire state and now I want to know how can exclude markers in a certain city? Say I am displaying a map of Indiana and want to exclude Indianapolis.
I have a rough idea where I can select the points and some how check if they are between a certain range but could someone elaborate on this with a more specific example or is there a better approach to this?
What you need is something called Reverse Geocoding, which will give you result of street name, city name and country name, given longitude latitude example.
I will do these steps :
Iterate all the marker and "reverse geocoding" the marker lat-long.
Check city result of the "reverse geocoding".
If the City is not inside your accepted cities, remove the marker.

Resources