2014-06-11 2 views
1

나는 하루 종일 Google Earth 폴리곤을 포함하는 kml에서 데이터를 읽고 이름과 좌표를 추출하고 모든 것을 저장하는 코드를 작성하려고 노력했습니다. 위도와 경도. 사용자가 kml을 찾아보고 추출 코드를 실행할 수있는 사용자 서식을 이미 만들었습니다. 불행히도 추출이 작동하지 않습니다. 저는 VB에서 매우 새로운데, 대학에서 C 학기 3 학기를 택했고, 그 이후로 1 년 가까이되었습니다. ..VB.NET을 사용하여 KML에서 다각형 이름과 좌표 추출

Function X(InputFile As String, Text As String) 

    Dim textReader As New Xml.XmlTextReader(InputFile) 
    Dim lastElementName As String = "" 
    While textReader.Read() 
     Select Case textReader.NodeType 
      Case Xml.XmlNodeType.Element 
       lastElementName = textReader.Name 
      Case Xml.XmlNodeType.Text 
       MsgBox(lastElementName & ": " & textReader.Value) 
     End Select 
     Console.WriteLine() 
    End While 

기본 KML 예 여기에 내가 가진 무엇 그러나 나는 또한 완전히 잘못 될 수 있다고 이해 : 지금까지 내가 말할 수있는

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
    <Placemark> 
    <name>The Pentagon</name> 
    <Polygon> 
     <tessellate>1</tessellate> 
     <outerBoundaryIs> 
     <LinearRing> 
     <coordinates> 
     -77.05668055019126,38.87154239798456 
     -77.05542625960818,38.87167890344077 
     -77.05485125901024,38.87076535397792 
     -77.05577677433152,38.87008686581446 
     -77.05691162017543,38.87054446963351 
     -77.05668055019126,38.87154239798456 
     </coordinates> 
    </LinearRing> 
    </outerBoundaryIs> 
    </Polygon> 
    </Placemark> 
</kml> 
+3

안녕하세요. SO! 불행히도, 현재 서서 귀하의 질문은 너무 광범위합니다. 나는 여기 많은 독자들이 KML 형식의 세부 사항에 익숙하지 않다는 것을 알고 있습니다. 파싱하려는 KML 파일의 간단한 예를 제공하면 도움이됩니다 (관련 부분으로 축소). 일반적으로, 나는 [VB LINQ to XML] (http://stackoverflow.com/a/1066418/87698)이 문제를 해결하는데 도움이 될 것이라고 생각하지만, 세부 사항 없이는 말하기 어렵다. – Heinzi

+0

조언 주셔서 감사합니다. 위의 아주 간단한 kml을 추가했습니다. – DonaldShadow

답변

1

, 다음과 같은 하위 문제가 있습니다

  1. XML을 구문 분석하고 이름과 좌표를 추출하십시오.

  2. 일부 데이터 구조로 좌표를 분할합니다. 1 단계의 경우


는 XML에 VB의 LINQ는 가장 쉬운 방법입니다. 다음 작업 코드 예제를 시작하는 데 도움이 될 것입니다

Imports <xmlns="http://www.opengis.net/kml/2.2"> 

Module Module1 
    Sub Main() 
     Dim xdata = New XDocument(_ 
      <kml xmlns="http://www.opengis.net/kml/2.2"> 
       <Placemark> 
        <name>The Pentagon</name> 
        <Polygon> 
         <tessellate>1</tessellate> 
         <outerBoundaryIs> 
          <LinearRing> 
           <coordinates> 
           -77.05668055019126,38.87154239798456 
           -77.05542625960818,38.87167890344077 
           -77.05485125901024,38.87076535397792 
           -77.05577677433152,38.87008686581446 
           -77.05691162017543,38.87054446963351 
           -77.05668055019126,38.87154239798456 
           </coordinates> 
          </LinearRing> 
         </outerBoundaryIs> 
        </Polygon> 
       </Placemark> 
      </kml>) 

     For Each p In xdata.Root.<Placemark> 
      Console.WriteLine("Name: " & p.<name>.Value) 

      For Each c In p...<coordinates> 
       Console.WriteLine("Coordinates: " & c.Value) 
      Next 
     Next 

     Console.ReadLine() 
    End Sub 
End Module 

일부 발언 :

2 단계 운동으로 남아 있지만, String.Split은 (첫째 줄 바꿈에, 다음 쉼표에) 및 String.Trim (공백을 제거하기 위해) 쉽게이 문제를 해결하도록해야한다.

관련 문제