2010-08-25 45 views
1

我一直在使用Google地图API和数据库驱动地图时遇到了一些麻烦。在之前的一个问题中,我曾询问过有关地图地址解析的快速地理编码问题,基本上我需要将Lat/Lng存储到数据库中,并从那里创建地图,而不是在地图加载时进行地理编码。用户输入注册然后地理编码到数据库中

但是,我不确定如何做到这一点。我知道基本的前提 - 1)用户注册并输入他们的地址。 2)数据库应该存储用户的信息,以及地址。 3)需要对地址进行地址编码,然后将其添加到数据库的Lat/Lng字段中。 4)通过循环查询Lat/Lng字段,可以将标记放置在地图上。

任何想法如何做到这一点?我正在使用ColdFusion,SQL Server。

+0

基本前提听起来不错。你究竟在哪里确定? – 2010-08-25 14:53:38

+0

如何从Google的地理编码获取坐标并将其存储到数据库中 – knawlejj 2010-08-25 15:02:35

回答

2

您可以使用Google's Geocoding Service。 API非常简单。您在url中发送一个地址,并返回一些带有地理编码结果的xml。更好的是,RiaForge上有一个名为Google Geocoder v3的项目,可以为您完成所有工作。

这里的CFC的一些示例代码:

<cfinvoke component="googlegeocoder3" method="googlegeocoder3" returnvariable="variables.geocode_query1">  
    <cfinvokeargument name="address" value="1600 Amphitheatre Parkway, Mountain View, CA"> 
    <cfinvokeargument name="ShowDetails" value="false"> 
</cfinvoke> 

<cfdump var="#variables.geocode_query1#"> 

至于什么时候做地理编码,你有两个选择。一种方法是在注册时执行此操作 - 从注册表中获取地址,调用地理编码服务以获取纬度/经度,然后将所有内容保存到数据库中。另一个选项是保存注册地址,然后有一个单独的计划任务来定期检查和地理编码任何未经地理编码的地址。

+0

非常感谢Peter。您的两个地理编码选项正是我想到的。我喜欢第一个更好,因为加入的用户可能想要立即在地图上看到他们的标记。我会在下午处理这个问题,并让你知道我想出了什么。 – knawlejj 2010-08-25 16:09:04

0

好了,在使用Peter的建议和Google Geocoder v3之后,我把自己的东西扔在一起,因为Google Geocoder v3 cfc不起作用。

 <!---Geocode the address and convert it to Lat/Lng ---> 
     <cfset address2geocode = '#Form.Client_Address#, #Form.Client_City#, #Form.Client_State#'> 

     <cfhttp url="http://maps.google.com/maps/api/geocode/xml?address=#address2geocode#&sensor=true" /> 
     <cfset geocodedXML = #xmlParse(cfhttp.filecontent)#> 

     <!--- Add the record to the database---> 
     <cfquery datasource="#dsn#" name="AddMember"> 
     INSERT INTO BSC_Clients (Client_Lng, Client_Lat) 
     VALUES ('#geocodedXML.GeocodeResponse.result.geometry.location.lng.XmlText#', '#geocodedXML.GeocodeResponse.result.geometry.location.lat.XmlText#') 
     </cfquery> 

这将有效地采取指定的地址+城市+国家(扔在数据库中的所有其他用户信息,这是不是在代码中显示)和将其转换成将被储存回纬度/长值数据库。谷歌地图,然后应通过一个标记显示新地址