تحديد ما إذا كانت النقطة الجغرافية داخل X متر من حدود الدولة (باستخدام Shapefile لبيانات الحدود)

StackOverflow https://stackoverflow.com/questions/917484

سؤال

لذلك أنا أكتب تطبيق Java، ولدي أشكال إسري يحتوي على حدود جميع الدول الأمريكية. ما أحتاج إليه هو أن أكون قادرا على تحديد ما إذا كانت أي نقطة Lat / Lat / Lat ضمن مسافة محددة من أي خط حد الدولة - أي سأفعل ليس أن تحدد خط حدود معين، فقط بحاجة لمعرفة ما إذا كانت النقطة قريبة من أي منهم.

لا يجب أن يكون الحل دقيقا للغاية على الإطلاق؛ على سبيل المثال، لا أحتاج إلى التعامل مع قياس عمودي على الحدود، أو أيا كان. فقط تحقق لمعرفة ما إذا كان الذهاب X متر الشمال أو الجنوب أو الشرق أو الغرب سيؤدي إلى عبور الحدود سيكون أكثر من كافية. يجب أن يكون الحل فعاليا بشكل حسابي، كما سأقوم بأداء عدد كبير من هذه الحسابات.

أخطط لاستخدام مكتبة GeoTools (على الرغم من وجود خيار أبسط، فأنا جميعا لذلك) مع البرنامج المساعد Shapefile. ما لا أفهمه حقا هو: بمجرد تحميل الشكل في الذاكرة، كيف يمكنني التحقق لمعرفة ما إذا كنت بالقرب من الحدود؟

شكرا! -.

هل كانت مفيدة؟

المحلول

افترض jts. بالنسبة للهندسة التي هي ما يتم تضمينه في GeoTools:

public boolean pointIsClose( File file, Point targetPoint,double distance) {


  boolean ret = false;
  Map connect = new HashMap();
  connect.put("url", file.toURL());
  DataStore dataStore = DataStoreFinder.getDataStore(connect);


  FeatureSource featureSource = dataStore.getFeatureSource(typeName);
  FeatureCollection collection = featureSource.getFeatures();
  FeatureIterator iterator = collection.features();



  try {
    while (iterator.hasNext()) {
      Feature feature = iterator.next();
      Geometry sourceGeometry = feature.getDefaultGeometry();
      ret= sourceGeometry.isWithinDistance(targetPoint, distance );
    }
  } finally {
    iterator.close();
  }
  return ret;
}

يجب أن يأتي الرقم المزدوج من CRS. والتي ستحدد الوحدات التي سيتم تنفيذ الحساب فيها.

هذه هي واردات GeoTools:

import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.FeatureSource;
import org.geotools.feature.Feature;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

نصائح أخرى

إذا كنت تريد فقط معرفة ما إذا كانت النقطة A ضمن X Amals من حدود الحالة و X ثابتة ولا تهتم بالحدود، فيمكنك استبعاد المساحة السلبية كسلسلة من المربعات. ثم كل ما عليك فعله هو يحتوي على التحقق من كل من تلك المربعات ضد النقطة. إذا لم يطابق أي منهم، فأنت لست في الفضاء السلبي.

إذا استطعت استخراج الشكل بطريقة أو بأخرى لكل ولاية من الشكل، فقم بإنشاء مظروف هو X متر على جانب (مع وجهة نظرك في المركز الدقيق) ومعرفة ما إذا كان هذين الشكلان يتقاطعان، ستتمكن من الإجابة على السؤال وبعد

إذا كنت أستخدم محرك ArcGIS الخاص ESRI، فسأستخدم ISPATIALFILTER مع النقطة المعرفة في الهندسة (ربما مع مخزن مؤقت) واستعلام عن ذلك مقابل شكل الولايات. أي نتيجة (عددات) عادت أن النقطة كانت بالقرب من الدولة. أنا غير مألوف مع GeoTools، وفي حين التصفح من خلال وثائقهم، لم آخذ أي شيء يشبه هذا النوع من الوظائف، ولكن يجب أن يكون لديهم. قد ترغب في البحث عن أمثلة حول كيفية استخدام GeoTools لإجراء استعلامات مكانية على شكل صور.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top