2012-02-16 28 views
6

Tôi có một bảng với cấu trúc sau:Tạo KML trong SQL 2008

id, phím - Tiểu

minlatitude - điểm ranh giới của một hình vuông

minlongitude - điểm ranh giới của một hình vuông maxlatitude - điểm ranh giới của một hình vuông maxlongitude - điểm ranh giới của một hình vuông

cetnerLatitude - Trung tâm sqaure centerLonigtude - Trung tâm của sqaure

Trường tối thiểu tối thiểu tạo ra một hình vuông và trung tâm Lat/Long là cho điểm trung tâm của hình vuông.

Tôi muốn tạo tệp KML bằng cách sử dụng "đường dẫn xml". Các tập tin KML được tạo ra sẽ trông giống như sau:

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<Document> 
<Placemark> 
    <name>example</name> 
    <description> 
dafdafdsaf 
    </description> 
    <Point> 
    <coordinates>102.594411,14.998518</coordinates> 
    </Point> 
    <Polygon> 
    <extrude>1</extrude> 
    <altitudeMode>relativeToGround</altitudeMode> 
    <outerBoundaryIs> 
     <LinearRing> 
     <coordinates> 
      -77.05788457660967,38.87253259892824,100 
      -77.05465973756702,38.87291016281703,100 
      -77.05315536854791,38.87053267794386,100 
      -77.05788457660967,38.87253259892824,100 
     </coordinates> 
     </LinearRing> 
    </outerBoundaryIs> 
    </Polygon> 
</Placemark> 
</Document> 
</kml>""" 

tôi bắt đầu làm việc xung quanh các truy vấn xmlpath SQL và cho đến nay đã có kết quả sau:

declare @id int 
set @id = 22438 
declare @kml xml; 

with XMLNAMESPACES(
     'http://www.opengis.net/gml' as gml, 
     'http://www.georss.org/georss' as georss 
) 

select @kml = 
     (select some as id , 

     cast([cent_latt] as varchar) + ', ' + cast([cent_long] as varchar) as Point 
     from mytable 
     Where some = @id 

     for xml path('Placemark'), root('Document') 
     ) 

select @kml 

bất cứ ai có thể giúp tạo ra các tập tin chính xác như đã đề cập ở trên ?
Hoặc có cách nào để sử dụng xslt cho cùng không?

+1

Cung cấp dữ liệu bảng mẫu. –

+0

Bạn có thể vui lòng cung cấp cấu trúc của bảng nguồn và dữ liệu ví dụ không? – oryol

Trả lời

9

Tôi thực sự không hiểu tên cột nào bạn có cho thông tin nào nên tôi đã tạo một bảng mẫu sẽ cho bạn thấy cách bạn có thể lấy các phần khác nhau vào XML.

declare @T table 
(
    Name varchar(50), 
    Description varchar(50), 
    Point varchar(50), 
    Extrude int, 
    AltitudeMode varchar(50), 
    Coordinates varchar(200) 
); 

insert into @T values 
('example', 'dafdafdsaf', '102.594411,14.998518', 1, 'relativeToGround', 
'-77.05788457660967,38.87253259892824,100 
-77.05465973756702,38.87291016281703,100 
-77.05315536854791,38.87053267794386,100 
-77.05788457660967,38.87253259892824,100'); 

with xmlnamespaces(default 'http://www.opengis.net/kml/2.2') 
select (
     select Name as name, 
       Description as description, 
       Point as 'Point/coordinates', 
       (
       select Extrude as extrude, 
         AltitudeMode as altitudeMode, 
         Coordinates as 'outerBoundaryIs/LinearRing/coordinates' 
       for xml path('Polygon'), type 
      ) 
     from @T  
     for xml path('Placemark'), type 
     ) 
for xml path('Document'), root('kml'); 

Kết quả:

<kml xmlns="http://www.opengis.net/kml/2.2"> 
    <Document> 
    <Placemark xmlns="http://www.opengis.net/kml/2.2"> 
     <name>example</name> 
     <description>dafdafdsaf</description> 
     <Point> 
     <coordinates>102.594411,14.998518</coordinates> 
     </Point> 
     <Polygon xmlns="http://www.opengis.net/kml/2.2"> 
     <extrude>1</extrude> 
     <altitudeMode>relativeToGround</altitudeMode> 
     <outerBoundaryIs> 
      <LinearRing> 
      <coordinates>-77.05788457660967,38.87253259892824,100 
-77.05465973756702,38.87291016281703,100 
-77.05315536854791,38.87053267794386,100 
-77.05788457660967,38.87253259892824,100</coordinates> 
      </LinearRing> 
     </outerBoundaryIs> 
     </Polygon> 
    </Placemark> 
    </Document> 
</kml> 
+0

Câu trả lời hay! Tôi vừa phải xóa thẻ , vì vậy quá trình nhập đã hoạt động đối với tôi. –