User Profile
rbrundritt
Joined 7 years ago
User Widgets
Recent Discussions
Re: Depth layer in Azure Maps
Ah, yes. You can only have a single metric field per visual. In that case, since depth is always negative, you could use bars where the height is relative to the depth and the color is related to the quantity. The legend will only provide details about the quantity, and the depth information would only be displayed in the popup.1.2KViews0likes0CommentsRe: Depth layer in Azure Maps
cbslc665 The bar chart layer will always show bars above the surface. There is no visualization for showing things below the surface. Few map platforms support that type of visualization. That said, you could combine a set of layers here. Use the bar chart to show the absolute value of the depth and maybe color it accordingly to indicate it is a negative value, and then use the bubble layer to show the magnitude based on the radius.1.2KViews0likes2CommentsRe: Azure Map Pricing
For gen 2 pricing, the first 100K transactions would be charged with Tier 0 pricing (free usage is used up first each month), then the next 100K would be charged under Tier 1. So the calculation would be (100000 - 1000)/1000*4.5 + 100000/1000*3.01 = $746.50 You calculation for S0 is correct and would equal $100 a month. Note that S0 has a lot of limitations around it, such as the number of queries per second that can be made. That said, since you are only 64 transactions every 15 minutes, this isn't an issue. The Gen 2 pricing is designed for high volume users of the platform and is a really good alternative to the older S1 SKU. In your scenario, using S0 would make more sense, so choose that option.1.7KViews0likes1CommentRe: Depth layer in Azure Maps
Yggdrasill If you go into the general settings section of the visual, you will see there is an option to show negative values. When turned on, it's absolute value is used for relative scaling of sizes, but the popup will still display the correct negative value when hovered. More details here: https://docs.microsoft.com/en-us/azure/azure-maps/power-bi-visual-understanding-layers#general-layer-settings1.6KViews0likes0CommentsRe: Maps updates and accuracy
ericfeunekes This isn't something that would typically be documented and is completely dependent on the type of data you are looking for. Entities that have well known boundaries, such as counties and states, will have very high accuracy. Where as entities that don't have well known boundaries, such as zip codes, will have a degree of error that would vary with every zip code and is basically unknown exactly (if it was known, there wouldn't be a margin of error). Zip codes are points, and don't have officially defined polygon areas, and there is a lot of spaces that don't have addresses (i.e. back country of a national parks), so every data provider has to make some assumptions to create logical areas which are then used to power a reverse geocoder. To complicate things further some zip codes represent PO, boxes and several of them can be located at the same location within another zip code. There is even one zip code in the US that moves around (its a boat on the Detroit river, zip code 48222: https://en.wikipedia.org/wiki/J._W._Westcott_II)6.4KViews0likes0CommentsRe: Maps updates and accuracy
ericfeunekes Data that appears in the visual maps (interactive map controls, vector/raster tiles, static map service) is updated every week. The other REST services such as forward and reverse geocoding receive data updates every month. On a similar topic, if you do come across a data related issue, you can report it here: https://feedback.azuremaps.com/ This site has an option to get a URL to track your reported issue until it is resolved in production.6.4KViews1like2CommentsRe: Azure maps: Trying to draw direct line between two point at two corners of world
welcomenxj Managed to reproduce the issue and after talking with one of our architects I was reminded that the GeoJSON specification does not allow shapes to cross the antemeridian. I'm not a fan of this, luckily there are a few ways around this: Options 1: Similar to above, but break the line into segments to minimize complexity and shift longitude values outside of the -180/180 range as needed. Then create a MultiLineString from the segments. You end up with a line with coordinates outside of the standard range but should render any line back and forth over the antemeridian as needed. Option 2: Leverage a library to split the line segments on the antemeridian and create a MultiLineString. This method is a lot more work and and might not be as accurate, but should also work with any line. Here is a code sample showing all two options: <!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="utf-8" /> <meta http-equiv="x-ua-compatible" content="IE=Edge" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <!-- Add references to the Azure Maps Map control JavaScript and CSS files. --> <link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.min.css" type="text/css" /> <script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.js"></script> <!-- Load turf.js a spatial math library. https://turfjs.org/ --> <script src='https://npmcdn.com/@turf/turf/turf.min.js'></script> <script type='text/javascript'> var map, datasource; var data = { "type": "Feature", "properties": {}, "geometry": { "type": "LineString", "coordinates": [ [ 144.9586, -37.848381 ], [ -118.1948, 33.767109 ] ] } }; function GetMap() { //Initialize a map instance. map = new atlas.Map('myMap', { view: 'Auto', //Add your Azure Maps subscription client ID to the map SDK. Get an Azure Maps client ID at https://azure.com/maps authOptions: { authType: 'subscriptionKey', subscriptionKey: '<Your Azure Maps Key>' } }); //Wait until the map resources are ready. map.events.add('ready', function () { //Create a data source to add your data to. datasource = new atlas.source.DataSource(); map.sources.add(datasource); //Add a layer for rendering data. map.layers.add(new atlas.layer.LineLayer(datasource)); map.setCamera({ bounds: atlas.data.BoundingBox.fromData(data) }); }); } function option1 () { //Trick map to render one of the points on an adjacent map. Doing a deep copy of the coordinates to be safe since reusing in sample. var c = data.geometry.coordinates.map(function(arr) { return arr.slice(); }); var lastCoord = c[0]; var newCoords = []; var newCoord; for(var i = 1, len = c.length; i < len; i++){ let diff = lastCoord[0] - c[i][0]; if(diff > 180){ //Line going left to right, but should go opposite direction. newCoord = [c[i][0] + 360, c[i][1]]; } else if (diff < -180) { //Line going right to left, but should go opposite direction. newCoord = [c[i][0] - 360, c[i][1]]; } else { //Leave coord as is. newCoord = c[i]; } newCoords.push([lastCoord, newCoord]); lastCoord = c[i]; } datasource.setShapes(new atlas.data.MultiLineString(newCoords)); } function option2() { //Split the line into segments and split each segment on the antimeridian, then create a MultuLineString from the segments. var c = data.geometry.coordinates; var newCoords = []; for(var i = 1, len = c.length; i < len; i++){ newCoords = newCoords.concat(splitLineSegment(c[i - 1], c[i])); } datasource.setShapes(new atlas.data.MultiLineString(newCoords)); } function splitLineSegment(fromPos, toPos) { var path; //Check to see if path should cross anti-meridian. if (Math.abs(fromPos[0] - toPos[0]) > 180 && Math.abs(fromPos[0]) > 90) { var l1, l2; var rightMostPos = toPos; var leftMostPos = fromPos; if (fromPos[0] > toPos[0]) { rightMostPos = fromPos; leftMostPos = toPos; } //Wrap the left most coordinate to a value between 180 and 540, then split on anti-meridian. var fc = turf.lineSplit( //Line to split. turf.lineString([rightMostPos, [leftMostPos[0] + 360, leftMostPos[1]]]), //Line to split with. turf.lineString([[180, 90], [180, -90]])); //Get the first line segment. var seg1 = fc.features[0].geometry.coordinates; shiftPositions(seg1[0], seg1[1]); //Its possible that there is a shared coordinate in the two line segments, do a deep copy of the second segment cooridnates to be safe. var seg2 = fc.features[1].geometry.coordinates.map(function(arr) { return arr.slice(); }); shiftPositions(seg2[0], seg2[1]); return [ //Segment 1 seg1, //Segment 2 seg2 ]; } else { //Only a single line segment. return [[fromPos, toPos]]; } } function shiftPositions(p1, p2) { //If either position has a longitude value outside of the -180 to 180 range, shift the longitude value of both positions as needed. if(p1[0] > 180 || p2[0] > 180){ p1[0] -= 360; p2[0] -= 360; } else if(p1[0] < -180 || p2[0] < -180){ p1[0] += 360; p2[0] += 360; } } </script> </head> <body onload="GetMap()"> <div id="myMap" style="position:relative;width:100%;height:600px;"></div> <input type="button" onclick="option1()" value="Option 1"/> <input type="button" onclick="option2()" value="Option 2"/> </body> </html>9KViews1like1CommentRe: Azure maps: Trying to draw direct line between two point at two corners of world
welcomenxj Additional details and comments here: https://stackoverflow.com/questions/63596623/azure-maps-trying-to-draw-direct-line-between-two-point-at-two-corners-of-world Does the last comment help?9.2KViews0likes5CommentsRe: Announcing Location telemetry support in Azure IoT Central
Car-Digital-Thread The Azure Maps platform is growing fast and working closely with customers and partners. The Azure Maps team works very closely with the Microsoft connected car team (we sit in the same office and report up to the same managers). In terms of What3Words, we haven't made any announcements but will work with our customers/partners to determine if this is truly something that they feel will bring added value to them.3.6KViews0likes0CommentsRe: On the IoT Show: Introducing Spatial Operations for Azure Maps
JohnWright6853 The demo shown in that video isn't yet online as it is primarily a demo and not a good code sample (yet). There is however a tutorial on using the geofencing API here: https://docs.microsoft.com/en-us/azure/azure-maps/tutorial-geofence993Views1like1Comment