从地理编码器结果获取城市?
从地理编码器结果获取不同的数组内容时遇到问题。
item.formatted_address 有效,但 item.address_components.locality 无效?
geocoder.geocode( {'address': request.term }, function(results, status) {
response($.map(results, function(item) {
alert(item.formatted_address+" "+item.address_components.locality)
}
});
// 返回的数组是;
"results" : [
{
"address_components" : [
{
"long_name" : "London",
"short_name" : "London",
"types" : [ "locality", "political" ]
} ],
"formatted_address" : "Westminster, London, UK" // rest of array...
任何帮助表示赞赏!
直流
Having problems getting the different arrays content from geocoder results.
item.formatted_address works but not item.address_components.locality?
geocoder.geocode( {'address': request.term }, function(results, status) {
response($.map(results, function(item) {
alert(item.formatted_address+" "+item.address_components.locality)
}
});
// the array returned is;
"results" : [
{
"address_components" : [
{
"long_name" : "London",
"short_name" : "London",
"types" : [ "locality", "political" ]
} ],
"formatted_address" : "Westminster, London, UK" // rest of array...
any help appreciated!
Dc
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(15)
我使用了一个名为 find 的 lodash 函数,它返回谓词返回 true 的对象。就这么简单!
I used a lodash function called find which returns the object that the predicate returns true for. As simple as that!
好吧,如果你想进入这座城市,这对我有用
Well this worked for me if you want to get the city
正如大多数答案所说,地址组成部分一直在变化,并且它们因国家/地区而异。您不能仅对
地点
进行核算,因为在某些地址和区域中这是不可用的。例如,检查印度尼西亚的地点 ID: <代码>EjdOeXVoIEt1bmluZyBSb2FkLCBNQVMsIEdpYW55YXIgUmVnZW5jeSwgQmFsaSwgSW5kb2 5lc2lhIi4qLAoUChIJJzq08aA90i0Rb3AEsy1pPUoSFAoSCcsgYMOTPdItEYAPg8r7CwMF查找城市的更可靠方法是使用
administrative_area_level
类型。如果未提供位置,则采用较低级别的行政区域(或您喜欢的行政区域),如下所示:As most answers say, the address components change all the time and they vary hugely by country/region. You cannot account just on
locality
because in some addresses and regions that's not available. As an example, check this place ID here in Indonesia:EjdOeXVoIEt1bmluZyBSb2FkLCBNQVMsIEdpYW55YXIgUmVnZW5jeSwgQmFsaSwgSW5kb25lc2lhIi4qLAoUChIJJzq08aA90i0Rb3AEsy1pPUoSFAoSCcsgYMOTPdItEYAPg8r7CwMF
A more robust way to find the city is to use the
administrative_area_level
types. If locality is not provided, then take the lower level administrative area (or which one you prefer), like so:无需迭代即可获取城市,通常城市位于address_components对象的第二个键上,因此第二个表示1:
You can get the city without iterate, generally the city is located on the 2nd key of address_components object so the 2nd mean 1:
最终使用以下方法使此工作正常进行:
Got this working in the end using:
尝试了几个不同的请求:
MK107BX
<一href="http://maps.googleapis.com/maps/api/geocode/json?address=2a%20Cleveland%20Park%20Crescent,UK&sensor=false" rel="noreferrer">英国克利夫兰公园新月
就像你说的,返回的数组大小不一致,但两个结果的城镇似乎都在类型为 [ "locality", "political" ] 的 address_component 项中。也许你可以用它作为一个指标?
编辑:使用 jQuery 获取位置对象,将其添加到您的响应函数中:
tried a couple of different requests:
MK107BX
Cleveland Park Crescent, UK
like you say, array size returned is inconsistent but the Town for both results appears to be in the address_component item with type of [ "locality", "political" ]. Perhaps you could use that as an indicator?
EDIT: get the locality object using jQuery, add this to your response function:
我必须创建一个程序,当用户单击地图上的位置时,该程序将填写用户表单中的纬度、经度、城市、县和州字段。该页面可以在 http://krcproject.groups.et.byu.net 找到,并且是允许公众为数据库做出贡献的用户表单。我不敢自称是专家,但它效果很好。
I had to create a program that would fill in the latitude, longitude, city, county, and state fields in a user form when the user clicks on a location on the map. The page can be found at http://krcproject.groups.et.byu.net and is a user form to allow the public to contribute to a database. I don't claim to be an expert, but it works great.
我假设您想要获取城市和州/省:
不要尝试返回结果,因为您会发现它们是未定义的 - 这是异步服务的结果。您必须调用一个函数,例如 updateAddress();
I am assuming you want to get the city and the state / province:
Don't try to return the results as you will find that they are undefined - a result of an asynchronous service. You must call a function, such as updateAddress();
我创建了这个函数来获取地理编码器结果的主要信息:
因此,您可以像这样使用它:
假设您要搜索
圣地亚哥伯纳乌体育场
,所以结果将是:I created this function to get the main info of geocoder results:
So, you can use it like this:
let's say that you are going search
Santiago Bernabéu Stadium
, so, the result will be:这对我有用:
或者一次性:
我在 Node 中执行此操作,所以这没问题。如果您需要支持 IE,则需要使用
Array.prototype.includes
或找到另一种方法。This worked for me:
or in one go:
I'm doing this in Node, so this is okay. If you need to support IE you need to use a polyfill for
Array.prototype.includes
or find another way of doing it.我认为谷歌不提供某种功能来获取这些内容真是令人痛苦。无论如何,我认为找到合适对象的最佳方法是:
I think it is a real pain that google doesn't provide some sort of functionality to get these. Anyhow I think the best way of finding the right object is:
如果存在则返回局部性。如果不是 - 返回
administrative_area_1
Returns locality if exist. If not - returns
administrative_area_1
以下是一些可以与 lodash js 库一起使用的代码:(只需将 $scope.x 替换为您自己的变量名即可存储值)
Here's some code you can use with the lodash js library: (just replace the $scope.x with your own variable name to store the value)