Daha çox

İstifadəçi Shapefile-də ox sifariş

İstifadəçi Shapefile-də ox sifariş


Aşağıdakı PRJ-yə sahib olan bir formalı sənədim var

GEOGCS ["WGS 84", DATUM ["Dünya Geodeziya Sistemi 1984", SPHEROID ["WGS 84", 6378137.0, 298.257223563, OTHORITY ["EPSG", "7030"]], Authority ["EPSG", "6326"]] , PRIMEM ["Greenwich", 0.0, YETKİ [[EPSG "," 8901 "]], UNIT [" dərəcə ", 0.017453292519943295], AXIS [" Geodezik enlem ", ŞIMALI], AXIS [" Geodezik uzunluq ", ŞƏRQ], Səlahiyyət ["EPSG", "4326"]]

Anladığım qədəri ilə bu lat, uzun sifariş deməkdir. Bununla birlikdə, geotoollardan istifadə edərək xüsusiyyətləri oxuduğumda koordinatları uzun və gec sifariş verərəm, ən azı xüsusiyyətlər təhlil edildikdən sonra ayıklayıcımda gördüyüm budur. Məsələ ondadır ki, aşağıdakı kodu istifadə edərək 4326-ya bir reprojection edirəm (ümumi shapefile idxal xidməti edirəm):

CoordinateReferenceSystem geo = CRS.decode ("EPSG: 4326", doğru); CoordinateReferenceSystem crs = feature.getFeatureType (). GetCoordinateReferenceSystem (); MathTransform çevirmə = boş; if (! crs.equals (geo)) {try {transform = CRS.findMathTransform (crs, geo, true); } tutmaq (FactoryException e) {yeni istisna atmaq ("Dəstəklənməyən proyeksiya növü"); }}

Və bu bütün uzun uzun koordinatları geri qaytarır!

PRJ sənədində ox sırasının vacib olduğunu söyləmək düzgündürsə və həqiqətən də PRJ və SHP arasında sifariş uyğunsuzluğunun olduğunu düşünsək, bununla necə məşğul ola bilərəm?


Nə edərdim əvvəlcə mənbə oxu sıralaması (lat, lon) ilə bağlı fərziyyələrimin düzgün olub olmadığını yoxlamaqdır. Google-da koordinatlarınızı xəritələşdirin və təhsil alanın həqiqətən orada olub olmadığını görsən.

Unutulmaması lazım olan başqa bir şey, fərqli proqram məhsullarının CRS-lərlə işləmə qaydalarının fərqli bir arxa kodlaşdırmasına sahib olmasıdır. Geotools və ya kodunuzun əvvəlcədən təyin edilmiş ox sifariş tərifinə əsaslanan məlumatları qəbul edən bir şəkildə yazılması çox yaxşı ola bilər.

Hər hansı bir halda, bir dəfə reddetməyiniz tamamlandıqdan sonra və shapefile lazım olduğu yerdə görünmürsə .prj faylındakı ox sifarişlərini əl ilə dəyişdirə bilərsiniz. Proqramın proqnozlarımızı dəqiq bir şəkildə idarə etmədiyi HALE ilə şema çevrilməsi hallarında bu, əlbəttə ki, mənim üçün işləyir. .Prj ilə əl ilə qarışmaq bir həll idi, ancaq böyük bir məlumat dəstiniz varsa, işlər praktik ola bilər.


Ümumiyyətlə, bu kimi hallar üçün GeoTools ox düzəlişinə dair suallara müraciət edin - beləliklə shapefile içindəki ox sıranızın lat / lon olduğuna inanırsınız.

Sonra kodunuzla bağlı bəzi problemlər var:

CoordinateReferenceSystem geo = CRS.decode ("EPSG: 4326", doğru);

sistemin FORCE_LONGITUDE_FIRST_AXIS_ORDER doğru olduğu təqdirdə (və yalnız belə olduqda) lon / lat ilə CRS yaradır, bu da ola bilər və ya olmaya da bilər.

Əmin olmaq və belə bir şey istifadə etmək daha yaxşıdır:

// Çıxış CRS-nin spesifik CRSAuthorityFactory cFactory = CRS.getAuthorityFactory (true) tələbinə uyğun olaraq uzun, uzun olmasına məcbur etmək; try {outCRS = cFactory.createCoordinateReferenceSystem ("EPSG: 4326"); } catch (FactoryException e) {yeni RuntimeException ("CRS fabriki tapılmadı", e); }

Həm də

əgər (! crs.equals (geo)) {

2 CRS obyektinin eyni obyekt olma ehtimalı zəif olduğu üçün demək olar ki, həmişə yalan olacaq, istifadə etmək daha yaxşıdır:

əgər (! CRS.equalsIgnoreMetadata (crs, geo)) {

həqiqi parametrlərin uyğun olub olmadığını yoxlayacaq.

Siz də istifadə edə bilərsinizCRS.getAxisOrder (crs)ox sırasını asanlıqla müqayisə edilə bilən saylama kimi əldə etmək.