Google maps 加上「;搜索区“;谷歌地图结果的轮廓
去年,谷歌在其产品中添加了搜索区域轮廓,正如许多地方报道的那样,在谷歌地图上也可以看到。例如,报告和 明确地说,这是google添加与搜索查询相关的大纲的时候。如果你要搜索一个城镇、邮政编码或邮政编码,谷歌会在地图上突出显示这个区域。例如: 这显然无法通过API获得,只能通过谷歌自己的web属性获得 最近,我注意到一些其他域正在使用此功能,例如Google maps 加上「;搜索区“;谷歌地图结果的轮廓,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,去年,谷歌在其产品中添加了搜索区域轮廓,正如许多地方报道的那样,在谷歌地图上也可以看到。例如,报告和 明确地说,这是google添加与搜索查询相关的大纲的时候。如果你要搜索一个城镇、邮政编码或邮政编码,谷歌会在地图上突出显示这个区域。例如: 这显然无法通过API获得,只能通过谷歌自己的web属性获得 最近,我注意到一些其他域正在使用此功能,例如 Twitter和其他大型组织是否有单独的API?是否已添加此功能,但尚未记录?或者我只是错过了公告,找不到任何文档?你在那里看到的提纲来自twitte
Twitter和其他大型组织是否有单独的API?是否已添加此功能,但尚未记录?或者我只是错过了公告,找不到任何文档?你在那里看到的提纲来自twitter,它们一定已经存储好了 查看调用twitter页面时请求的json文件: 我已经试过了,
几何。坐标[0][0]
定义了一个精细的多边形(猜一下奥斯汀的轮廓)
当您尝试时,请注意该对的顺序是lng,lat
而不是lat,lng
因此,这可能是实现大纲的一个良好开端,幸运的是twitter支持用于客户端解决方案的JSONP
请参见一个示例:
twitter API已更改,示例不再有效(需要身份验证)
我找到了一个画城市边界的很好的解决方案
这是一个非常酷的工具,你可以在这里画城市边界。您可以随心所欲地做到:
在右侧,您可以看到代码的实时预览。您可以在KML和javascript之间进行选择。切换到javascript。然后复制你的坐标
在这里,你可以看到布鲁塞尔(欧洲)的边界
::地图:
var映射;
//库德
布鲁塞尔变量=[
新google.maps.LatLng(50.835866,4.258575),
新的google.maps.LatLng(50.818083,4.244499),
新google.maps.LatLng(50.811358,4.276428),
新的google.maps.LatLng(50.813094,4.302177),
新google.maps.LatLng(50.773162,4.338226),
新google.maps.LatLng(50.764259,4.384918),
新google.maps.LatLng(50.793132,4.482422),
新google.maps.LatLng(50.810274,4.450836),
新google.maps.LatLng(50.821120,4.476585),
新google.maps.LatLng(50.852342,4.462852),
新google.maps.LatLng(50.866861,4.421310),
新google.maps.LatLng(50.895021,4.430580),
新google.maps.LatLng(50.911692,4.413757),
新google.maps.LatLng(50.912342,4.395561),
新google.maps.LatLng(50.898486,4.377708),
新google.maps.LatLng(50.900868,4.328957),
新google.maps.LatLng(50.889174,4.293251),
新google.maps.LatLng(50.880294,4.297028),
新google.maps.LatLng(50.861878,4.279175),
新google.maps.LatLng(50.855593,4.288788),
新google.maps.LatLng(50.837817,4.282608),
新google.maps.LatLng(50.835866,4.259605)
];
$(文档).ready(函数(){
//你的地图在哪里居中
var latlng=新的google.maps.latlng(50.834999,4.387665);
变量myOptions={
缩放:10,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
var BrusselsHightlight;
//绘制多边形或多段线
BrusselsHightlight=新建google.maps.Polygon({
路径:布鲁塞尔,
strokeColor:#6666FF“,
笔划不透明度:0.8,
冲程重量:2,
fillColor:#6666FF“,
不透明度:0.35
});
BrusselsHightlight.setMap(map);
});
html,正文{高度:100%;边距:0px;填充:0px;}
#地图画布{
宽度:600px;
高度:400px;
}
这对我来说真是太棒了。因为地图API还没有提供解决方案,手动填写坐标不关任何人的事,这里有一个替代方案。在地理信息系统的网站上找到了这个答案——绝对的救星(如果画卡尔加里的话,会节省jurihandl很多时间,上图;D): 您可以在json中获取多边形坐标,以便与googlemaps一起使用 使用openstreetmap。去。搜索 像“加利福尼亚州旧金山”这样的地方 点击“详情” 查找OSM ID并复制它(control+c),例如:2018776 粘贴ID并下载 JSON文件
来源:推特api地理端点不会给你城市边界 它们提供给您的只是带有5点(横向、纵向)的边界框 这是我从旧金山的推特API GEO中得到的
这让人有点头疼,但是你可以使用BING maps api来获取详细的多边形。他们让我们很难从他们的api中找出答案,但他们帮助了我。一旦他们发送数据给你,你就必须解压缩数据。他们在那篇文章中使用bing maps api绘制形状,但我正在将其转换为geojson。我就是这样做的
function getBingMapsGeometry(latitude, longitude, entityType) {
//api docs: https://docs.microsoft.com/en-us/bingmaps/spatial-data-services/geodata-api
let baseUrl =
"http://platform.bing.com/geo/spatial/v1/public/geodata?SpatialFilter=",
levelOfDetail = 3,
getAllPolygons = 1,
getEntityMetadata = 1,
culture = "en-us",
userRegion = "US",
preferCuratedPolygons = 1,
responseFormat = "json",
key = "your_api_key";
return fetch(`${baseUrl}GetBoundary(${latitude},${longitude},${levelOfDetail},'${entityType}',${getAllPolygons},${getEntityMetadata},'${culture}','${userRegion}')&PreferCuratedPolygons=${preferCuratedPolygons}&$format=${responseFormat}&key=${key}`
).then(res => {
res.json().then(result => {
var entity = result.d.results[0];
if (!entity) {
alert("no results");
return;
}
// much help from this post: https://blogs.bing.com/maps/2013/06/25/retrieving-boundaries-from-the-bing-spatial-data-services-preview
var entityMetadata = entity.EntityMetadata;
entityMetadata.name = entity.Name.EntityName;
var primitives = entity.Primitives;
var boundaryVertices = null;
var numOfVertices = 0;
var multyiPolygonArray = [];
var singlePolygonArray;
for (var i = 0; i < primitives.length; i++) {
var ringStr = primitives[i].Shape;
var ringArray = ringStr.split(",");
for (var j = 1; j < ringArray.length; j++) {
var polygonArray = new Array();
var array = ParseEncodedValue(ringArray[j]);
if (array.length > numOfVertices) {
numOfVertices = array.length;
boundaryVertices = array;
}
polygonArray.push(array);
if (ringArray.length > 1)
multyiPolygonArray.push(polygonArray);
else singlePolygonArray = polygonArray;
}
}
let geojson = {
type: "FeatureCollection",
features: [
{
type: "Feature",
properties: entityMetadata,
geometry: {
type: singlePolygonArray
? "Polygon"
: "MultiPolygon",
coordinates: singlePolygonArray
? singlePolygonArray
: multyiPolygonArray
}
}
]
};
return geojson;
});
});
}
function ParseEncodedValue(value) {
var safeCharacters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
var list = new Array();
var index = 0;
var xsum = 0;
var ysum = 0;
var max = 4294967296;
while (index < value.length) {
var n = 0;
var k = 0;
while (1) {
if (index >= value.length) {
return null;
}
var b = safeCharacters.indexOf(value.charAt(index++));
if (b == -1) {
return null;
}
var tmp = (b & 31) * Math.pow(2, k);
var ht = tmp / max;
var lt = tmp % max;
var hn = n / max;
var ln = n % max;
var nl = (lt | ln) >>> 0;
n = (ht | hn) * max + nl;
k += 5;
if (b < 32) break;
}
var diagonal = parseInt((Math.sqrt(8 * n + 5) - 1) / 2);
n -= (diagonal * (diagonal + 1)) / 2;
var ny = parseInt(n);
var nx = diagonal - ny;
nx = (nx >> 1) ^ -(nx & 1);
ny = (ny >> 1) ^ -(ny & 1);
xsum += nx;
ysum += ny;
var lat = ysum * 0.00001;
var lon = xsum * 0.00001;
list.push([lon, lat]);
}
return list;
}
函数getBingMapsGeometry(纬度、经度、entityType){
//api文档:https://docs.microsoft.com/en-us/bingmaps/spatial-data-services/geodata-api
让baseUrl=
"http://platform.bing.com/geo/spatial/v1/public/geodata?SpatialFilter=",
详细级别=3,
getAllPolygons=1,
getEntityMetadata=1,
culture=“en us”,
userRegion=“US”,
preferCuratedPolygons=1,
responseFormat=“json”,
key=“你的api密钥”;
返回fetch(`${baseUrl}GetBoundary(${latitude},${longi
function getBingMapsGeometry(latitude, longitude, entityType) {
//api docs: https://docs.microsoft.com/en-us/bingmaps/spatial-data-services/geodata-api
let baseUrl =
"http://platform.bing.com/geo/spatial/v1/public/geodata?SpatialFilter=",
levelOfDetail = 3,
getAllPolygons = 1,
getEntityMetadata = 1,
culture = "en-us",
userRegion = "US",
preferCuratedPolygons = 1,
responseFormat = "json",
key = "your_api_key";
return fetch(`${baseUrl}GetBoundary(${latitude},${longitude},${levelOfDetail},'${entityType}',${getAllPolygons},${getEntityMetadata},'${culture}','${userRegion}')&PreferCuratedPolygons=${preferCuratedPolygons}&$format=${responseFormat}&key=${key}`
).then(res => {
res.json().then(result => {
var entity = result.d.results[0];
if (!entity) {
alert("no results");
return;
}
// much help from this post: https://blogs.bing.com/maps/2013/06/25/retrieving-boundaries-from-the-bing-spatial-data-services-preview
var entityMetadata = entity.EntityMetadata;
entityMetadata.name = entity.Name.EntityName;
var primitives = entity.Primitives;
var boundaryVertices = null;
var numOfVertices = 0;
var multyiPolygonArray = [];
var singlePolygonArray;
for (var i = 0; i < primitives.length; i++) {
var ringStr = primitives[i].Shape;
var ringArray = ringStr.split(",");
for (var j = 1; j < ringArray.length; j++) {
var polygonArray = new Array();
var array = ParseEncodedValue(ringArray[j]);
if (array.length > numOfVertices) {
numOfVertices = array.length;
boundaryVertices = array;
}
polygonArray.push(array);
if (ringArray.length > 1)
multyiPolygonArray.push(polygonArray);
else singlePolygonArray = polygonArray;
}
}
let geojson = {
type: "FeatureCollection",
features: [
{
type: "Feature",
properties: entityMetadata,
geometry: {
type: singlePolygonArray
? "Polygon"
: "MultiPolygon",
coordinates: singlePolygonArray
? singlePolygonArray
: multyiPolygonArray
}
}
]
};
return geojson;
});
});
}
function ParseEncodedValue(value) {
var safeCharacters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
var list = new Array();
var index = 0;
var xsum = 0;
var ysum = 0;
var max = 4294967296;
while (index < value.length) {
var n = 0;
var k = 0;
while (1) {
if (index >= value.length) {
return null;
}
var b = safeCharacters.indexOf(value.charAt(index++));
if (b == -1) {
return null;
}
var tmp = (b & 31) * Math.pow(2, k);
var ht = tmp / max;
var lt = tmp % max;
var hn = n / max;
var ln = n % max;
var nl = (lt | ln) >>> 0;
n = (ht | hn) * max + nl;
k += 5;
if (b < 32) break;
}
var diagonal = parseInt((Math.sqrt(8 * n + 5) - 1) / 2);
n -= (diagonal * (diagonal + 1)) / 2;
var ny = parseInt(n);
var nx = diagonal - ny;
nx = (nx >> 1) ^ -(nx & 1);
ny = (ny >> 1) ^ -(ny & 1);
xsum += nx;
ysum += ny;
var lat = ysum * 0.00001;
var lon = xsum * 0.00001;
list.push([lon, lat]);
}
return list;
}