Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,22 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
config: {
lib: typeof google.maps;
map: google.maps.Map;
isolatedData?: boolean;
} & TerraDrawExtend.BaseAdapterConfig,
) {
super(config);
this._lib = config.lib;
this._map = config.map;
this._isolatedData = config.isolatedData || false;

this._coordinatePrecision =
typeof config.coordinatePrecision === "number"
? config.coordinatePrecision
: 9;
}

private _isolatedData: boolean = false;
private _data: google.maps.Data | undefined;
private _cursor: string | undefined;
private _cursorStyleSheet: HTMLStyleElement | undefined;
private _lib: typeof google.maps;
Expand Down Expand Up @@ -83,7 +87,7 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
// Clicking on data geometries triggers
// swallows the map onclick event,
// so we need to forward it to the click callback handler
this._clickEventListener = this._map.data.addListener(
this._clickEventListener = this.data().addListener(
"click",
(
event: google.maps.MapMouseEvent & {
Expand All @@ -99,7 +103,7 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
},
);

this._mouseMoveEventListener = this._map.data.addListener(
this._mouseMoveEventListener = this.data().addListener(
"mousemove",
(
event: google.maps.MapMouseEvent & {
Expand All @@ -114,6 +118,18 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
}
},
);

if (this._isolatedData) {
this._data = new this._lib.Data();
this._data.setMap(this._map);
}
}

protected data() {
if (this._isolatedData && this._data) {
return this._data;
}
return this._map.data;
}

public unregister(): void {
Expand All @@ -126,6 +142,11 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
}
this._overlay = undefined;
this._readyCalled = false;

if (this._isolatedData && this._data) {
this._data.setMap(null);
this._data = undefined;
}
}

/**
Expand Down Expand Up @@ -314,9 +335,9 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
render(changes: TerraDrawChanges, styling: TerraDrawStylingFunction) {
if (this._layers) {
changes.deletedIds.forEach((deletedId) => {
const featureToDelete = this._map.data.getFeatureById(deletedId);
const featureToDelete = this.data().getFeatureById(deletedId);
if (featureToDelete) {
this._map.data.remove(featureToDelete);
this.data().remove(featureToDelete);
this.renderedFeatureIds.delete(deletedId);
}
});
Expand All @@ -326,9 +347,7 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
throw new Error("Feature is not valid");
}

const featureToUpdate = this._map.data.getFeatureById(
updatedFeature.id,
);
const featureToUpdate = this.data().getFeatureById(updatedFeature.id);

if (!featureToUpdate) {
throw new Error("Feature could not be found by Google Maps API");
Expand Down Expand Up @@ -403,7 +422,7 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
// Create new features
changes.created.forEach((createdFeature) => {
this.renderedFeatureIds.add(createdFeature.id as string);
this._map.data.addGeoJson(createdFeature);
this.data().addGeoJson(createdFeature);
});
}

Expand All @@ -416,9 +435,9 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
features: [...changes.created],
} as GeoJsonObject;

this._map.data.addGeoJson(featureCollection);
this.data().addGeoJson(featureCollection);

this._map.data.setStyle((feature) => {
this.data().setStyle((feature) => {
const mode = feature.getProperty("mode");
const gmGeometry = feature.getGeometry();
if (!gmGeometry) {
Expand Down Expand Up @@ -499,11 +518,11 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda

private clearLayers() {
if (this._layers) {
this._map.data.forEach((feature) => {
this.data().forEach((feature) => {
const id = feature.getId() as string;
const hasFeature = this.renderedFeatureIds.has(id);
if (hasFeature) {
this._map.data.remove(feature);
this.data().remove(feature);
}
});
this.renderedFeatureIds = new Set();
Expand All @@ -524,8 +543,8 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda
}

// clean up any styles set on the default data layer
if (this._map.data) {
this._map.data.setStyle(null);
if (this.data()) {
this.data().setStyle(null);
}
}

Expand Down
Loading