目标:我希望拥有自定义搜索(地理编码)功能,并能够列出并单击每个结果并将其显示在地图上.
通缉:相应地调整地图边界/缩放级别,即搜索"MA,USA"应该缩放地图以让我看到整个马萨诸塞州,而搜索"波士顿,马萨诸塞州,美国"应该放大波士顿地区.列出多个结果时,单击结果时应该同样适用.
问题:我可以使用带有fitBounds的geometry.bounds对象 - 但是 - 使用地理编码器获得的一些结果没有该geometry.bounds对象.
一个简单的例子:搜索"波士顿"回归
波士顿,美国
马萨诸塞州,美国波士顿,IN,美国
波士顿,肯塔基州,美国
波士顿,GA 31626,美国
波士顿,塞勒姆,VA 22713,美国
波士顿,NY 14025,美国
"Boston,KY"和"Boston NY 14025"都没有界限.
问题:是否有可靠的方法在适当的缩放级别上在地图上显示任何地理编码器结果?
现在我正在使用类似的东西,但我觉得这很丑,并没有解决缩放问题
if (results[0].geometry.bounds) {
map.fitBounds(results[0].geometry.bounds);
} else {
map.setCenter(results[0].geometry.location);
// eventually set zoom here to some middle-range value (ugly)
}
Run Code Online (Sandbox Code Playgroud) javascript google-maps google-maps-api-3 google-geocoder fitbounds
我一直试图从谷歌的地理编码服务获得json回应.我正在使用PHP.我正在尝试fopen,然后我在另一个stackoverflow问题中读到我应该使用file_get_contents,但是也没有用.然后我一直在搜索并在另一个论坛中找到一个人,如果我使用CURL,我会更好的解决方案,所以我改变了我的代码并且无法正常工作.在所有情况下,我收到"错误400:错误请求.您的客户发出了格式错误或非法的请求."
我的代码是这样的:
$jsonUrl = "http://maps.googleapis.com/maps/api/geocode/json?address=" . $cityName . "&sensor=false";
$geocurl = curl_init();
curl_setopt($geocurl, CURLOPT_URL, $jsonUrl);
curl_setopt($geocurl, CURLOPT_HEADER,0); //Change this to a 1 to return headers
curl_setopt($geocurl, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
curl_setopt($geocurl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($geocurl, CURLOPT_RETURNTRANSFER, 1);
$geofile = curl_exec($geocurl);
Run Code Online (Sandbox Code Playgroud)
然后我打印内容并收到错误消息.
有任何想法吗?
非常感谢你.
我有一些代码,我正在从API v2移植到v3.在旧代码中,我们有一个准确性字段,它返回到xml中(不确定名称,但确实代表了各种类型的置信度).在新的API中,我没有看到任何类似的字段.
如果我把"俄勒冈州,美国"放入搜索领域,我会得到5场比赛.前两个是"俄勒冈州,美国"和"俄勒冈州,俄亥俄州,美国".他们都有"partial_match"= false.这似乎不对,一个似乎是偏袒的,一个不是.另外,他们都回来了相同的"location_type"(APPROXIMATE).实际上,所有匹配都显示为非局部且具有相同的位置类型.
我的问题是,结果集中的任何字段是否都会对结果的准确性产生某种信心?在我的示例中,看起来似乎一个结果比任何其他结果更准确 - 以至于输入字符串与返回的QuickAddress字段完全匹配.
我觉得愚蠢,但我一直在寻找这个.我正在使用谷歌地理编码器API,我需要一些json响应的帮助.这是我拥有的JSONObject:
{
"viewport": {
"southwest": {
"lng": -78.9233749802915,
"lat": 36.00696951970851
},
"northeast": {
"lng": -78.92067701970849,
"lat": 36.0096674802915
}
},
"location_type": "ROOFTOP",
"location": {
"lng": -78.922026,
"lat": 36.0083185
}
}
Run Code Online (Sandbox Code Playgroud)
如何将"位置"子字段拉入自己的变量?我试着jsonObjectVariable.getString("location");和jsonObjectVariable.getDouble()等,但它无法正常返回.你在json对象中称为子字段是什么?我已经读过你可以使用object.subobject语法访问子字段,但我只是没有得到我需要的东西.
(我使用json-org作为库)
谢谢您的帮助!
我需要从纬度和经度获得城市和州.Geocoder执行此功能以获得城市和州.但我java.io.IOException: grpc failed只在Android真实设备上收到错误.它在模拟器中运行良好.
new Geocoder(context).getFromLocation(latLng.latitude, latLng.longitude, 1).get(0);
Run Code Online (Sandbox Code Playgroud)
此外,我一直在使用Asynctask调用此函数,这是在另一篇文章中建议的Geocoder grpc在堆栈溢出失败,但对我没有任何作用.
我也重启了设备但仍然失败了.
需要帮助.提前致谢.
注意:我测试了Google Pixel XL,三星S6边缘,三星S4.
android google-maps latitude-longitude android-location google-geocoder
我正在使用Google Maps V3 api.我正在提交地址搜索以返回正确的地理编码结果,包括地址,建立名称和lat/lngs.
我的问题是来自地理编码器的响应可以采用不同的格式.它始终遵循相同的结构,但是一些响应对address_components数据结构使用不同的键.
例如,某些搜索会导致:
establishment -> location name
street_number -> address street number
route -> the street name
locality -> the city
administrative_area_level_1 -> the state
postal_code -> zip/postal code
Run Code Online (Sandbox Code Playgroud)
然而,如果我要搜索一般区域,例如"Hampton Beach,NH",我会收到:
sublocality -> beach name / area
administrative_area_level_3 -> city/town name
administrative_area_level_1 -> the state
postal_code -> zip/postal code
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这两个回答有其不同之处.是否有一个已知的jquery库可用于处理这些不同的响应,以返回可用于人类可读方式的地址组件的数据集?
我会注意到响应也返回一个"formatted_address"类型,它返回它:"Hampton Beach,NH 03842,USA"或"Boston University,1 University Rd,Boston,MA 02215-1407,USA"正如你所看到的,这些也是非常不同的.我可以用逗号分割,但我想使用实际的address_components来实现完美的数据库插入.
我正在使用GeoPy将地址编码为lat,lng.我还想提取每个地址的逐项地址组件(街道,城市,州,邮政编码).
GeoPy返回一个带有地址的字符串 - 但我找不到一种可靠的方法来分隔每个组件.例如:
123 Main Street, Los Angeles, CA 90034, USA =>
{street: '123 Main Street', city: 'Los Angeles', state: 'CA', zip: 90034, country: 'USA'}
Run Code Online (Sandbox Code Playgroud)
Google地理编码API会返回这些单独的组件......有没有办法从GeoPy获取这些组件?(或不同的地理编码工具?)
我正在使用它google.maps.places.AutocompleteService来获取场所搜索的建议,但我无法对一些预测进行地理编码.
这方面的一个例子:当我搜索" 风暴河口 "时,我得到的预测之一是" 南非风暴河口休息营 ",但这个地址无法进行地理编码以获得格子/经度,例如:http ://maps.googleapis.com/maps/api/geocode/json地址=风暴%20River%20Mouth%20Rest%20Camp,%20South%20Africa&传感器=真
有没有办法获得自动完成预测的纬度/经度值?
或者,我不明白为什么谷歌自动完成正在返回我无法进行地理编码的预测.
这是我正在使用的逻辑和代码的基本示例:
var geocoder = new google.maps.Geocoder();
var service = new google.maps.places.AutocompleteService(null, {
types: ['geocode']
});
service.getQueryPredictions({ input: query }, function(predictions, status) {
// Show the predictions in the UI
showInAutoComplete(predictions);
};
// When the user selects an address from the autcomplete list
function onSelectAddress(address) {
geocoder.geocode({ address: address }, function(results, status) {
if (status !== google.maps.GeocoderStatus.OK) {
// This shouldn't never happen, but it does
window.alert('Location was not …Run Code Online (Sandbox Code Playgroud) 到目前为止,我已经搜索了相当多的运气.
Android Geocoder返回android.location.Address对象.据我所知,这座城市应归还getLocality().在美国境内看起来效果很好,不在外面.
我正在编写一个国际应用程序,并努力寻找解决方案来找出地理位置的城市.
这里捷克共和国/布拉格的输出:
Address[addressLines=
[0:"Psohlavc? 1764/2",
1:"147 00 Prague-Prague 4",
2:"Czech Republic"],
feature=2,
admin=Hlavní m?sto Praha,
sub-admin=Prague,
locality=null,
thoroughfare=Psohlavc?,
postalCode=147 00,
countryCode=CZ,
countryName=Czech Republic,
hasLatitude=true,
latitude=50.0276543,
hasLongitude=true,
longitude=14.4183926,
phone=null,
url=null,
extras=null]
Run Code Online (Sandbox Code Playgroud)
locality是空的,城市在里面sub-admin!地址本身没问题,所以地理编码服务器似乎知道这个城市.
这里有一些随机的欧盟示例,但地点部分起作用:
Address[addressLines=[0:"Nad lesem 440/34",1:"147 00 Prague-Prague 4",2:"Czech Republic"],feature=34,admin=Hlavní m?sto Praha,sub-admin=Prague,locality=null,thoroughfare=Nad lesem,postalCode=147 00,countryCode=CZ,countryName=Czech Republic,hasLatitude=true,latitude=50.02424,hasLongitude=true,longitude=14.4117568,phone=null,url=null,extras=null]
Address[addressLines=[0:"Hauner Straße 4",1:"84431 Heldenstein",2:"Germany"],feature=4,admin=null,sub-admin=null,locality=Heldenstein,thoroughfare=Hauner Straße,postalCode=84431,countryCode=DE,countryName=Germany,hasLatitude=true,latitude=48.2540274,hasLongitude=true,longitude=12.3413535,phone=null,url=null,extras=null]
Address[addressLines=[0:"Igler Straße",1:"6020 Innsbruck",2:"Austria"],feature=Igler Straße,admin=Tyrol,sub-admin=Innsbruck,locality=Innsbruck,thoroughfare=Igler Straße,postalCode=6020,countryCode=AT,countryName=Austria,hasLatitude=true,latitude=47.2465698,hasLongitude=true,longitude=11.4054237,phone=null,url=null,extras=null]
Address[addressLines=[0:"Durnberg 24",1:"5724 Stuhlfelden",2:"Austria"],feature=24,admin=Salzburg,sub-admin=Zell am See District,locality=null,thoroughfare=Durnberg,postalCode=5724,countryCode=AT,countryName=Austria,hasLatitude=true,latitude=47.3233373,hasLongitude=true,longitude=12.4960482,phone=null,url=null,extras=null]
Address[addressLines=[0:"U Rohá?ových kasáren 14",1:"100 00 Prague 10",2:"Czech Republic"],feature=14,admin=Hlavní m?sto Praha,sub-admin=Prague,locality=Prague …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocationName(text, 10);
test.clear();
for (int i = 0; i < addresses.size(); i++) {
Address address = addresses.get(i);
for (int j=0;j<address.getMaxAddressLineIndex();j++) {
test.add(address.getAddressLine(j) + ", " + address.getCountryName());
// address.getLatitude();
// address.getLatitude();
}
}
Run Code Online (Sandbox Code Playgroud)
但我找不到像address.getPlaceID()这样的东西.
也许我使用另一个API来自name或lat,从上面的代码获取PlaceID.谢谢!
google-geocoder ×10
google-maps ×6
android ×3
geocoding ×3
javascript ×3
curl ×1
fitbounds ×1
geopy ×1
java ×1
json ×1
python ×1