Файл формы или геойсон в базу данных - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь прочитать большой файл формы и пытаюсь определить, находятся ли координаты широты и долготы в координатах, используя geotools

Можно ли сохранить файл формы в базе данных?Или будет хранить как geojson и retirerive быстрее, чтобы проверить, что lat и long находятся в координатах?Узел JS или Java, который будет иметь более легкую реализацию.

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Поправьте меня, если я ошибаюсь, но я понимаю, что у вас будет бэкэнд Java (Spring Boot) или NodeJS.

У меня нет опыта разработки приложений NodeJS, однако я делаюесть на Яве.Мое предложение состоит в том, что вы можете достичь этого довольно быстро, таким образом:

  • Используйте последнюю версию Spring Boot (2.1.2.RELEASE).
  • Используйте любую базу данных, поддерживающую пространственные функции, напримерPostgreSQL / PostGIS, Microsoft SQL Server, MySQL и т. Д.Я предполагаю, что вы также использовали бы любой NoSQL db.
  • . Используйте Java Topology Suite (известный как JTS) или Geolatte фреймворки для моделирования ваших доменных объектов в Java как геометрии.Я никогда не использовал Geolatte, но я думаю, что он более мощный, чем JTS.Тем не менее, JTS имеет две реализации: vividsolutions и locationtech's .Первая версия является устаревшей, написанной в 2012 году, а вторая - более новой.Я всегда выбираю последнюю версию каждой библиотеки, но не могу вас заверить, можете ли вы выбрать ее, учитывая, что JTS-зависимость добавлена ​​в Spring Boot.

В целом, я бы хотелвыберите Spring Boot 2 + JTS и отобразите каждый геопространственный объект как геометрию.Вы можете проверить мою Gist по созданию гео-объектов.Решите, какой SRID вы будете использовать.В ваших сущностях сопоставьте геообъекты с типом данных Geometry .Проверьте следующий пример:

package model;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import com.vividsolutions.jts.geom.Geometry;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Singular;

@Entity
@Table(name="stops")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Stop implements Serializable {

    @Transient private static final long serialVersionUID = -2747601079894033016L;

    @Id private String id;
    private String codParada;
    private String tipoExtraido; 
    private String uri;
    private String titulo;
    private Geometry geometria;
    private LocalDateTime ultimaActualizacion;
    @Singular @ElementCollection private List<String> mensajes;
    private String icono;
    private String enlace;
    private String descripcion;
    @Enumerated(EnumType.STRING) private ETipoParada tipo;

}
0 голосов
/ 06 февраля 2019

Самый простой способ - открыть файл Shapefile (или GeoJSON) с помощью хранилища данных, а затем скопировать объекты из этого хранилища в PostGIS (или другую базу данных ).) хранилище данных.Просто убедитесь, что включили соответствующий модуль в вашу maven pom.

  public static void main(String[] args) throws MalformedURLException, IOException {
    File inFile = new File("/home/ian/Data/states/states.shp");
    Map<String, Object> outParams = new HashMap<>();
    outParams.put(PostgisNGDataStoreFactory.DBTYPE.key, PostgisNGDataStoreFactory.DBTYPE.sample);
    outParams.put(PostgisNGDataStoreFactory.USER.key, "ian");
    outParams.put(PostgisNGDataStoreFactory.PASSWD.key, "ianian");
    outParams.put(PostgisNGDataStoreFactory.HOST.key, "localhost");
    outParams.put(PostgisNGDataStoreFactory.PORT.key, 5432);
    outParams.put(PostgisNGDataStoreFactory.DATABASE.key, "ian");
    outParams.put(PostgisNGDataStoreFactory.SCHEMA.key, "public");
    // Read
    DataStore inputDataStore = DataStoreFinder.getDataStore(
            Collections.singletonMap("url", URLs.fileToUrl(inFile)));

    String inputTypeName = inputDataStore.getTypeNames()[0];
    SimpleFeatureType inputType = inputDataStore.getSchema(inputTypeName);

    FeatureSource<SimpleFeatureType, SimpleFeature>
            source = inputDataStore.getFeatureSource(inputTypeName);

    FeatureCollection<SimpleFeatureType, SimpleFeature>
            inputFeatureCollection = source.getFeatures();

    DataStore newDataStore = DataStoreFinder.getDataStore(outParams);


    String typeName = inputTypeName;

    newDataStore.createSchema(inputType);
    SimpleFeatureStore featureStore = (SimpleFeatureStore) newDataStore.getFeatureSource(typeName);

    /*
     * //Optional Filter block //filter String geometryPropertyName =
     * inputType.getGeometryDescriptor().getLocalName();
     * CoordinateReferenceSystem targetCRS =
     * inputType.getGeometryDescriptor().getCoordinateReferenceSystem();
     * 
     * double x1 = 11.5; double y1 = 49.8; double x2 = 12.0; double y2 = 50.1;
     * 
     * ReferencedEnvelope bbox = new ReferencedEnvelope(x1, y1, x2, y2,
     * targetCRS); FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
     * Filter filter = ff.bbox(ff.property(geometryPropertyName), bbox);
     */
    // write results
    featureStore.addFeatures(source.getFeatures(/*filter*/));
    //tidy up
    inputDataStore.dispose();
    newDataStore.dispose();
    newDataStore.createSchema(inputType);
    String typeName1 = newDataStore.getTypeNames()[0];

    SimpleFeatureStore featureStore1 = (SimpleFeatureStore) newDataStore.getFeatureSource(typeName1);

    featureStore1.addFeatures(inputFeatureCollection);

    inputDataStore.dispose();
    newDataStore.dispose();
  }
0 голосов
/ 06 февраля 2019

Вы можете сохранить файл формы в MySQL как пространственные данные, используя инструмент ogr2ogr.

Прочитайте эту ссылку:

https://www.igismap.com/insert-shapefile-in-mysql-as-spatial-data/

...