2013-03-20 46 views
2

如果您的.csv文件中包含地址信息,您可以将其拖放到Google Earth上(此后称为GE),然后会出现一个向导,您可以指定字段,然后GE将开始对并为每个地址创建点(纬度和经度)。然后,您可以将地理编码的文件导出为kml,并获取每个点的经纬度。但是该过程具有2500行的限制。如何在Google地球中创建kml到地理编码地址?

我听说可以创建一个kml(或者一个xml)文件并将其拉入GE以启动地理编码过程,并且此方法没有行限制。有人可以帮助我弄清楚如何做到这一点?我已经尝试了以下代码,该代码成功导入到GE中,但没有创建点。

我知道一些Google Maps API可以做类似的事情,每天有超过100,000行的行数限制用于商业用途,但我真的很想让这个过程与GE一起工作。

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"> 
<Document> 
    <name>GEImport1.csv</name> 
    <Schema name="GEImport1" id="S_GEImport1_S"> 
     <SimpleField type="string" name="Adress"><displayName>&lt;b&gt;Adress&lt;/b&gt;</displayName> 
</SimpleField> 
    </Schema> 
    <Style id="hlightPointStyle"> 
     <IconStyle> 
      <Icon> 
       <href>http://maps.google.com/mapfiles/kml/shapes/placemark_circle_highlight.png</href> 
      </Icon> 
     </IconStyle> 
     <BalloonStyle> 
      <text><![CDATA[<table border="0"> 
    <tr><td><b>Adress</b></td><td>$[GEImport1/Adress]</td></tr> 
</table> 
]]></text> 
     </BalloonStyle> 
    </Style> 
    <Style id="normPointStyle"> 
     <IconStyle> 
      <Icon> 
       <href>http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png</href> 
      </Icon> 
     </IconStyle> 
     <BalloonStyle> 
      <text><![CDATA[<table border="0"> 
    <tr><td><b>Adress</b></td><td>$[GEImport1/Adress]</td></tr> 
</table> 
]]></text> 
     </BalloonStyle> 
    </Style> 
    <StyleMap id="pointStyleMap"> 
     <Pair> 
      <key>normal</key> 
      <styleUrl>#normPointStyle</styleUrl> 
     </Pair> 
     <Pair> 
      <key>highlight</key> 
      <styleUrl>#hlightPointStyle</styleUrl> 
     </Pair> 
    </StyleMap> 
    <Folder id="layer 0"> 
     <name>GEImport1</name> 
     <visibility>0</visibility> 
     <Placemark> 
      <visibility>0</visibility> 
      <styleUrl>#pointStyleMap</styleUrl> 
      <ExtendedData> 
       <SchemaData schemaUrl="#S_GEImport1_S"> 
        <SimpleData name="Adress">6212 GATUN CT Port ST Lucie, FL</SimpleData> 
       </SchemaData> 
      </ExtendedData> 
     </Placemark> 
     <Placemark> 
      <visibility>0</visibility> 
      <styleUrl>#pointStyleMap</styleUrl> 
      <ExtendedData> 
       <SchemaData schemaUrl="#S_GEImport1_S"> 
        <SimpleData name="Adress">6213 DIANA CT Port ST Lucie, FL</SimpleData> 
       </SchemaData> 
      </ExtendedData> 
     </Placemark> 
     <Placemark> 
      <visibility>0</visibility> 
      <styleUrl>#pointStyleMap</styleUrl> 
      <ExtendedData> 
       <SchemaData schemaUrl="#S_GEImport1_S"> 
        <SimpleData name="Adress">6213 DUKE CIR Port ST Lucie, FL</SimpleData> 
       </SchemaData> 
      </ExtendedData> 
     </Placemark> 
    </Folder> 
</Document> 
</kml> 

编辑:最终结果
JasonM1的解决方案的工作太棒了! 我结束了对KML文件格式如下:

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"> 
    <Document> 
<name>AddressImport</name> 
    <Style id="normPointStyle"> 
     <IconStyle> 
      <Icon> 
       <href>http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png</href> 
      </Icon> 
     </IconStyle> 
     <BalloonStyle> 
      <text><![CDATA[<table border="0"> 
      <tr><td><b>Address</b></td><td>$[address]</td></tr> 
      </table>]]> 
     </text> 
     </BalloonStyle> 
    </Style> 
    <StyleMap id="pointStyleMap"> 
     <Pair> 
      <key>normal</key> 
      <styleUrl>#normPointStyle</styleUrl> 
     </Pair> 
    </StyleMap> 
    <Folder id="layer 0"> 
     <name>AddressImport</name> 
     <visibility>1</visibility> 
     <Placemark> 
      <visibility>1</visibility> 
      <address>9994 CHADWICK DR Port ST Lucie, FL</address> 
      <styleUrl>#pointStyleMap</styleUrl> 
     </Placemark> 
     <Placemark> 
      <visibility>1</visibility> 
      <address>9995 AMBROSE WAY Port ST Lucie, FL</address> 
      <styleUrl>#pointStyleMap</styleUrl> 
     </Placemark> 
     <Placemark> 
      <visibility>1</visibility> 
      <address>9997 STONEGATE DR Port ST Lucie, FL</address> 
      <styleUrl>#pointStyleMap</styleUrl> 
     </Placemark> 
    </Folder> 
</Document> 
</kml> 

另外,我用下面的Excel VBA代码来自动创建KML文件:

Sub CreateCSV_FSO() 
    Dim objFSO 
    Dim objTF 
    Dim ws As Worksheet 
    Dim lRow As Long 
    Dim lCol As Long 
    Dim strTmp As String 
    Dim lFnum As Long 
    Dim sFilePath As String 
    Dim i As Long 
    Dim x As Integer 'used to represent the column that contains the address 
    sFilePath = ActiveWorkbook.Path & "\AddressImport.kml" 

    Set objFSO = CreateObject("scripting.filesystemobject") 
    Set objTF = objFSO.createtextfile(sFilePath, True, False) 

    'Header information 
    objTF.writeline "<?xml version=""1.0"" encoding=""UTF-8""?>" 
    objTF.writeline "<kml xmlns=""http://www.opengis.net/kml/2.2"" xmlns:gx=""http://www.google.com/kml/ext/2.2"" xmlns:kml=""http://www.opengis.net/kml/2.2"" xmlns:atom=""http://www.w3.org/2005/Atom"">" 
    objTF.writeline " <Document>" 
    objTF.writeline "<name>AddressImport</name>" 
    objTF.writeline " <Style id=""normPointStyle"">" 
    objTF.writeline "  <IconStyle>" 
    objTF.writeline "   <Icon>" 
    objTF.writeline "    <href>http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png</href>" 
    objTF.writeline "   </Icon>" 
    objTF.writeline "  </IconStyle>" 
    objTF.writeline "  <BalloonStyle>" 
    objTF.writeline "   <text><![CDATA[<table border=""0"">" 
    objTF.writeline "   <tr><td><b>Address</b></td><td>$[address]</td></tr>" 
    objTF.writeline "   </table>]]>" 
    objTF.writeline "  </text>" 
    objTF.writeline "  </BalloonStyle>" 
    objTF.writeline " </Style>" 
    objTF.writeline " <StyleMap id=""pointStyleMap"">" 
    objTF.writeline "  <Pair>" 
    objTF.writeline "   <key>normal</key>" 
    objTF.writeline "   <styleUrl>#normPointStyle</styleUrl>" 
    objTF.writeline "  </Pair>" 
    objTF.writeline " </StyleMap>" 
    objTF.writeline " <Folder id=""layer 0"">" 
    objTF.writeline "  <name>AddressImport</name>" 
    objTF.writeline "  <visibility>1</visibility>" 

    'input the number representative of the column that contains the address 
    x = 7 'a=1,b=2,c=3,d=4.....etc. 
    i = 2 
    While Cells(i, x) <> "" 

     strTmp = "" 
     strTmp = Cells(i, x) 
     strTmp = Replace(strTmp, "&", "and") 

     objTF.writeline "  <Placemark>" 
     objTF.writeline "   <visibility>1</visibility>" 
     objTF.writeline "   <address>" & strTmp & "</address>" 
     objTF.writeline "   <styleUrl>#pointStyleMap</styleUrl>" 
     objTF.writeline "  </Placemark>" 


     strTmp = Cells(i, x) 
     i = i + 1 
    Wend 

    objTF.writeline " </Folder>" 
    objTF.writeline "</Document>" 
    objTF.writeline "</kml>" 


    objTF.Close 
    Set objFSO = Nothing 
    MsgBox "Done!", vbOKOnly 

End Sub 

回答

2

使用< address>元素Google地球将自动地为您编码地址。

<Placemark> 
    <visibility>0</visibility> 
    <address>6213 DUKE CIR Port ST Lucie, FL</address> 
    <styleUrl>#pointStyleMap</styleUrl>    
</Placemark> 

您可以使用<address>标签可以指定点,而不是使用纬度和经度坐标的位置。 (但是,如果提供<Point>,它优先于<address>

另外,您不再需要架构和ADRESS SchemaData要素,而是可直接内联$ [地址]字段中BalloonStyle中文字:

<BalloonStyle> 
     <text><![CDATA[<table border="0"> 
      <tr><td><b>Adress</b></td><td>$[address]</td></tr> 
      </table>]]> 
     </text> 
</BalloonStyle> 

后加载在谷歌地球KML文件并保存它,你会发现,谷歌地球将其更改为与坐标下面填写的:

<Placemark> 
    <address>6213 DUKE CIR Port ST Lucie, FL</address> 
    <styleUrl>#pointStyleMap</styleUrl> 
    <MultiGeometry> 
     <Point> 
      <coordinates>-80.36086,27.366379,0</coordinates> 
     </Point> 
     <LinearRing> 
      <coordinates> 
       -80.36086,27.366379,0 -80.36086,27.366379,0 -80.36086,27.366379,0 -80.36086,27.366379,0 -80.36086,27.366379,0 
      </coordinates> 
     </LinearRing> 
    </MultiGeometry> 
</Placemark>