2014-10-21 15 views
5

Tôi muốn vẽ một polyline trên "Kiểm soát bản đồ XAML" với vĩ độ/kinh độ, sử dụng nội dung của shapefile.Đọc tọa độ shapefile trong C#

tôi có 2 loại shapefile:

  • Một với .dbf, .prj, qpj, .shx và tập tin rõ ràng .shp.
  • Một chỉ .shp nộp

Reading với cả hai loại file với các thư viện khác nhau (Topology Suite Net, và bây giờ DotSpatial) i có được một danh sách các tọa độ (DotSpatial.Topology.Coordinate) như:

X 456874.625438354 
Y 5145767.7929015327 
  • Làm cách nào để chuyển đổi sang định dạng vĩ độ/kinh độ?
  • Định dạng hiện tại là gì?
  • Các tệp đi kèm với tệp .shp có hữu ích không?
+1

Bạn nên quay lại lat/long, đảm bảo bạn đang chỉ định SRID và phép chiếu chính xác. – Habib

+0

Cảm ơn sự giúp đỡ. Phép chiếu shapefile (Shapefile.Projection) là WGS_1984_UTM_Zone_32N, từ tên tôi nghĩ rằng tọa độ có định dạng UTM, bạn có ví dụ về chuyển đổi nào không? – iRubens

+0

Hãy cho tôi biết bạn đang sử dụng api nào và bạn có thể kéo và thả không? –

Trả lời

4

Bạn có thể sử dụng DotSpatial để reproject để lat dài. Nếu bạn đang đọc trong shapefile, và các tệp .prj là có để chiếu được biết đến, sau đó tất cả các bạn cần làm là:

 Shapefile sf = Shapefile.OpenFile("C:\myshapefile.shp"); 
     sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984); 

Nếu, tuy nhiên các tệp .prj là mất tích, sau đó bạn sẽ cần phải xác định đầu tiên chiếu như:

 Shapefile sf = Shapefile.OpenFile("C:\myshapefile.shp"); 
     sf.Projection = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N; 
     sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984); 

Nhưng nếu, ví dụ bạn không có một shapefile và bạn chỉ muốn chiếu lại một tập hợp các tọa độ từ một dự báo khác, bạn có thể sử dụng tiện ích chiếu lại trực tiếp :

 // interleaved x and y values, so like x1, y1, x2, y2 etc. 
     double[] xy = new double[]{456874.625438354,5145767.7929015327}; 
     // z values if any. Typically this is just 0. 
     double[] z = new double[]{0}; 
     // Source projection information. 
     ProjectionInfo source = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N; 
     // Destination projection information. 
     ProjectionInfo dest = DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984; 
     // Call the projection utility. 
     DotSpatial.Projections.Reproject.ReprojectPoints(xy, z, source, dest, 0, 1); 

Phương pháp cuối cùng này sử dụng một mảng như vậy sao cho mô-đun chiếu có thể hoạt động mà không có tham chiếu trực tiếp đến mô-đun dữ liệu.

Các vấn đề liên quan