जब निर्देशांक समान होता है तब लाइनस्ट्रीमिंग को बहुभुज में परिणाम होता है
final WKTReader wktReader = new WKTReader();
String geomString = "MULTILINESTRING ((-98.753985 34.63093, -98.7555568 34.63093))";
MultiLineString geom = (MultiLineString)wktReader.read(geomString);
LineString newGeom = new GeometryFactory().createLineString(geom.getCoordinates());
Polygon envelope = (Polygon) newGeom.getEnvelope();
इस तरह के कोड ClassCastException () के साथ परिणाम देते हैं। हालाँकि, जब मैं किसी भी निर्देशांक के y मान को बदल रहा हूं, जैसे पहले एक से 34.6309 4 , मुझे कोई त्रुटि नहीं मिलती है।
मैं उपयोग कर रहा हूं org.locationtech.jts-1.17
।
मैं इस अपवाद के बिना बहुभुज के लिए इसे प्राप्त करना चाहता हूं। या, अपवाद वास्तव में वैध है और मैं बहुभुज के लिए किसी भी दो-समन्वित लाइनस्ट्रीमिंग कास्ट करने में सक्षम नहीं होना चाहिए?
जवाब
क्योंकि आपका मल्टीलाइनरिंग एक वर्टिकल लाइन है, जब आप लिफाफा मांगते हैं तो JTS आपको एक लाइन वापस देता है (यह सोचता है कि यह मददगार है)। तो आपको यह पूछने की ज़रूरत है कि आपको internalEnvelope
कौन सा Envelope
(एक xmin / xmax, ymin / ymax) मिलेगा। फिर आप इसे यूटिलिटी क्लासPolygon
का उपयोग करके बदल सकते हैं ।org.geotools.geometry.jts.JTS
final WKTReader wktReader = new WKTReader();
String geomString = "MULTILINESTRING ((-98.753985 34.63093, -98.7555568 34.63093))";
MultiLineString geom = (MultiLineString) wktReader.read(geomString);
LineString newGeom = new GeometryFactory().createLineString(geom.getCoordinates());
Geometry envelope = newGeom.getEnvelope();
System.out.println(envelope);
Envelope env = newGeom.getEnvelopeInternal();
System.out.println(env);
Polygon polygon = JTS.toGeometry(env);
System.out.println(polygon);
जो उत्पादन करता है:
LINESTRING (-98.7555568 34.63093, -98.753985 34.63093)
Env[-98.7555568 : -98.753985, 34.63093 : 34.63093]
POLYGON ((-98.7555568 34.63093, -98.753985 34.63093, -98.753985 34.63093, -98.7555568 34.63093, -98.7555568 34.63093))
नोट: बहुभुज अभी भी एक लाइन की तरह दिखाई देगा क्योंकि इसकी कोई चौड़ाई नहीं है, लेकिन मुझे लगता है कि आप क्या चाहते हैं।